ここには、私が持っているものが含まれています。 (私はそのようにコードを見つけました):JPopupMenuアクションがトリガーされていません
class CustomPopup extends JPopupMenu {
public CustomPopup() {}
@Override
public void setVisible(boolean visible)
{
// Case 1:
//if (visible) super.setVisible(visible);
// Case 2:
super.setVisible(visible);
}
}
class CustomPanel extends JPanel {
// .../...
public CustomPanel() {
setSize(200, 200);
addMouseListener(new MouseAdapter(){
@Override
public void mousePressed(MouseEvent e){
onMousePressed(e);
}
});
}
public void onMousePressed(MouseEvent e)
{
JPopupMenu pop = new JPopupMenu();
pop.add(new AbstractAction("foo")
{
@Override
public void actionPerformed(ActionEvent e)
{
// do stuff
System.out.println("this is executed");
}
});
pop.show(e.getComponent(), e.getX(), e.getY());
}
}
public class TestPopup extends JFrame {
CustomPanel _pp;
CustomPopup _cpop;
public TestPopup() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(333, 333);
_cpop = new CustomPopup();
_pp = new CustomPanel();
_cpop.add(_pp);
addMouseListener(new MouseAdapter(){
@Override
public void mousePressed(MouseEvent e){
_cpop.show(e.getComponent(), 0, 0);
}
});
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
(new TestPopup()).setVisible(true);
}
});
}
}
ポップアップメニューにカスタムパネルが表示されます。それと対話するときには、選択肢のリストを含む古典的なポップアップメニューが表示されます。
私の問題は、がそれ自体を閉じるべきではないということです。犯人は明らかにsetVisible
のオーバーライドですが、オーバーライドメソッドを削除したり、条件をコメントアウトしたりすると、別の問題が発生します。pop
に追加されたactionPerformed
メソッドが呼び出されることはありません。私はそれが
JPopupMenu
がを開くには、何かをクリックするとが- が開きます:最初のケースで
メニュー
Action
がトリガーされます 私はそれで何かをクリックしてください
-
- を開き
JPopupMenu
がを開き、が- を隠されているの項目にIをクリックします。第2のケースで
Action
はですOT私の結論は、アクションをトリガーするためは、私は本当に理由を理解していない場合でも、見えなければならないということです
新しいメニュー
を引き起こしました。だから私の質問は:どのようにをデフォルトのJPopupMenu
の動作を破らないように開いたままにするか、またはでアクショントリガーを正しく表示させるにはどうすればいいですか?
「JComponent :: setComponentPopupMenu()」はなぜですか? – trashgod
@trashgodもっと教えていただけますか?どのように問題を解決していますか? – gregseth
私はそれがそうであるかどうかわかりません。試してみるとどうなりますか?また、[ポップアップ・メニューは異なるシステムでは異なる方法でトリガされるため、['isPopupTrigger()'](https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html#popup)を確認する必要があることも考慮してください。 " – trashgod