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)
- 12 (2024-08-31 (土) 17:36:42)
TITLE:JPopupMenuをボタンの長押しで表示
Posted by aterai at 2009-01-26
JPopupMenuをボタンの長押しで表示
JToolBarに、長押しでJPopupMenu、クリックで選択されたメニューを表示するボタンを追加します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
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) {}
}
解説
上記のサンプルでは、1000ミリ秒ボタンを押したままにしておくと、JRadioButtonを配置したJPopupMenuを表示します。普通にクリックした場合は、現在選択されているJRadioButtonの色をコンソールに出力するようになっています。
JPopupMenuのレイアウトをpop.setLayout(new GridLayout(0,3));で変更し、三列にJRadioButtonを並べています。