Swing/PressAndHoldButton のバックアップ差分(No.1)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/PressAndHoldButton へ行く。
- 1 (2011-04-27 (水) 19:19:08)
- 2 (2013-01-12 (土) 21:44:48)
- 3 (2014-03-27 (木) 17:57:20)
- 4 (2014-11-19 (水) 20:16:50)
- 5 (2014-11-21 (金) 18:11:05)
- 6 (2015-12-18 (金) 16:30:28)
- 7 (2017-06-13 (火) 15:43:22)
- 8 (2017-11-07 (火) 13:02:39)
- 9 (2018-02-24 (土) 19:51:30)
- 10 (2019-06-14 (金) 20:37:19)
- 11 (2021-02-25 (木) 10:47:26)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JPopupMenuをボタンの長押しで表示 #navi(../) RIGHT:Posted by [[aterai]] at 2009-01-26 *JPopupMenuをボタンの長押しで表示 [#m55da14e] JToolBarに、長押しでJPopupMenu、クリックで選択されたメニューを表示するボタンを追加します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTRIzHMLNI/AAAAAAAAAgs/0_PwsyZOl-I/s800/PressAndHoldButton.png) **サンプルコード [#n8b1ddb4] #code{{ private class ArrowButtonHandler extends AbstractAction implements MouseListener { private final javax.swing.Timer autoRepeatTimer; private AbstractButton arrowButton = null; public ArrowButtonHandler() { autoRepeatTimer = new javax.swing.Timer(1000, new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("InitialDelay(1000)"); if(arrowButton!=null && arrowButton.getModel().isPressed() && autoRepeatTimer.isRunning()) { autoRepeatTimer.stop(); pop.show(arrowButton, 0, arrowButton.getHeight()); pop.requestFocusInWindow(); } } }); autoRepeatTimer.setInitialDelay(1000); pop.addPopupMenuListener(new PopupMenuListener() { public void popupMenuCanceled(PopupMenuEvent e) {} public void popupMenuWillBecomeVisible(PopupMenuEvent e) {} public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { if(arrowButton!=null) { arrowButton.setSelected(false); } } }); } public void actionPerformed(ActionEvent e) { if(autoRepeatTimer.isRunning()) { System.out.println("actionPerformed"); System.out.println(" "+bg.getSelection().getActionCommand()); if(arrowButton!=null) arrowButton.setSelected(false); autoRepeatTimer.stop(); } } public void mousePressed(MouseEvent e) { System.out.println("mousePressed"); if(SwingUtilities.isLeftMouseButton(e) && e.getComponent().isEnabled()) { arrowButton = (AbstractButton)e.getSource(); autoRepeatTimer.start(); } } public void mouseReleased(MouseEvent e) { autoRepeatTimer.stop(); } public void mouseExited(MouseEvent e) { if(autoRepeatTimer.isRunning()) { autoRepeatTimer.stop(); } } public void mouseEntered(MouseEvent e) {} public void mouseClicked(MouseEvent e) {} } }} **解説 [#m649a122] 上記のサンプルでは、1000ミリ秒ボタンを押したままにしておくと、JRadioButtonを配置したJPopupMenuを表示します。普通にクリックした場合は、現在選択されているJRadioButtonの色をコンソールに出力するようになっています。 ---- JPopupMenuのレイアウトをpop.setLayout(new GridLayout(0,3));で変更し、三列にJRadioButtonを並べています。 //**参考リンク **コメント [#b93295c6] #comment