JComponent
単にコントローラー ( ) とディスプレイ (JPopupMenu
拡張機能)である「日付ピッカー」コンポーネントを作成しました。ユーザーが矢印で日付を制御するときに、表示ポップアップが表示されたままになるようにしたいと思います。ポップアップをリセットするためにボタンを呼び出してみましpopup.show(...)
たmouseReleased
が、その後いつものように非表示になりません。の通常の動作を維持しながら、どうすればこれを達成できJPopupMenu
ますか?
確かに を使用できますJWindow
が、使用したフォーカスなどの表示/非表示の動作をエミュレートすることについて心配する必要がありJPopupMenu
ます。これは避けたいと思います。
ありがとうございました。:)
SSCCEE
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
public class PopupSSCCE {
private JFrame frame = new JFrame();
private JPanel controller = new JPanel();
private JLabel controllerLabel = new JLabel("Controller");
private JLabel display = new JLabel("Display");
private JPopupMenu popup = new JPopupMenu();
private JButton prev = new JButton("<");
private JButton next = new JButton(">");
private PopupSSCCE() {
controllerLabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
if (controllerLabel.contains(e.getPoint()))
popup.show(controllerLabel, -50, controllerLabel.getHeight());
}
});
frame.setPreferredSize(new Dimension(250, 300));
popup.setPreferredSize(new Dimension(200, 200));
controller.setPreferredSize(new Dimension(200, 50));
prev.setPreferredSize(new Dimension(50, 50));
next.setPreferredSize(new Dimension(50, 50));
controllerLabel.setPreferredSize(new Dimension(100, 50));
controller.add(prev);
controller.add(controllerLabel);
controller.add(next);
popup.add(display);
frame.getContentPane().add(controller);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
new PopupSSCCE();
}
}