2

私はJFrame典型的なチャットボックスのように見えるを持っています。サーバーに接続したりサーバーから切断したりするために、メインウィンドウにを実装しJPopupMenuて追加しました。 ただし、ポップアップメニューは表示されません。MouseListener

メインウィンドウのさまざまなJComponents:

  • JTextArea間にJScrollPane
  • JTextFieldメッセージを入力するには
  • Sendボタン
  • JScrollPaneおよびArrayListユーザーを表示する

  • 右クリックしてもポップアップが表示されるはずです。JTextAreaメッセージを入力するには、またはフィールドに入力してください。
    どのすべてのコンポーネントにリスナーを追加し、どのリスナーを追加しますか?

    コード

    変数:

        private static A_Chat_Client chatClient;
        public static String userName = "Anonymous";
    
    //------------------------------------------------------------------------------
        public static JFrame mainFrame = new JFrame();
        public static JTextArea textArea = new JTextArea(30,30);
        public static JScrollPane pane = new JScrollPane(textArea);
        public static JTextField message = new JTextField(10);
        public static JButton send = new JButton("Send");
    
        public static JPopupMenu popup = new JPopupMenu();
        public static JMenuItem connect = new JMenuItem("Connect");
        public static JMenuItem disconnect = new JMenuItem("Disconnect");
        public static JMenuItem help = new JMenuItem("Help");
    
        public static JList usersOnline = new JList();
        public static JScrollPane userPane = new JScrollPane(usersOnline);  
    

    主な方法

    public static void main(String[] args) {
            buildMainWindow();
            initialize();
            addListeners();
            popup.show(mainFrame, 0, 0); //forcefully popup
        }  
    

    addListeners()

    public static void addListeners(){
    
            mainFrame.addMouseListener(new MouseHandler());
    
            send.addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e){
                    actionSend();
                }
            });
            connect.addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e){
                    actionConnect();
                }
            });
            disconnect.addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e){
                    actionDisconnect();
                }
            });
            help.addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e){
                    actionHelp();
                }
            });
        }  
    

    クラスMouseHandler

    private static class MouseHandler extends MouseAdapter{
            @Override
            public void mouseClicked(MouseEvent e){
                if(e.isPopupTrigger()){
                    popup.show(mainFrame, e.getX(), e.getY());
                }
            }
        }
    
    4

    1 に答える 1

    2

    AWTEventListenerを使用してメインイベントキューにアタッチできますToolkit#addAWTEventListener

    次に、受信しているイベントのタイプを確認し、それがポップアップイベントであるかどうかを確認する必要があります。

    ここに画像の説明を入力してください

    public class TestGlobalPopup {
    
        public static void main(String[] args) {
            new TestGlobalPopup();
        }
    
        public TestGlobalPopup() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }
    
                    JFrame frame = new JFrame();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(new BorderLayout());
                    frame.add(new TestPane());
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public class TestPane extends JPanel {
    
            public TestPane() {
                Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
                    @Override
                    public void eventDispatched(AWTEvent event) {
                        if (event instanceof MouseEvent) {
                            MouseEvent me = (MouseEvent) event;
                            if (me.isPopupTrigger()) {
                                Component component = me.getComponent();
                                JPopupMenu popup = new JPopupMenu();
                                popup.add(new JLabel("Clicked on " + component.getClass().getName()));
                                popup.show(component, me.getX(), me.getY());
                            }
                        }
                    }
                }, AWTEvent.MOUSE_EVENT_MASK);
    
                setLayout(new GridBagLayout());
                GridBagConstraints gbc = new GridBagConstraints();
                gbc.gridx = 0;
                gbc.gridy = 0;
                add(new JLabel("Label: "), gbc);
                gbc.gridx++;
                add(new JTextField(10), gbc);
    
                gbc.gridy++;
                gbc.gridx = 0;
                gbc.gridwidth = 2;
                add(new JScrollPane(new JTextArea(5, 20)), gbc);
            }
    
        }
    
    }
    
    于 2013-01-15T02:27:26.110 に答える