setDefaultButton无法按预期工作

时间:2015-09-05 21:38:55

标签: java swing

public JoinChatClient(String serverAddress, String chatName)
    {
        chatWindow.getContentPane().add(sendButton, "South");
        chatWindow.getContentPane().add(splitPane, "Center");
        chatWindow.setSize(800,500);
        sendButton.addActionListener(this);
        chatWindow.setTitle("Chat Room");
        chatWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        splitPane.setDividerLocation(350);
        sendButton.setBackground(Color.gray);
        sendButton.setForeground(Color.red);
        outChatTextArea.setEditable(false);
        inChatTextArea.setFont (new Font("default",Font.ITALIC,20));
        outChatTextArea.setFont(new Font("default",Font.BOLD,20));
        inChatTextArea.setLineWrap(true);
        outChatTextArea.setLineWrap(true);
        inChatTextArea.setWrapStyleWord(true);
        outChatTextArea.setWrapStyleWord(true);
        inChatTextArea.setText("Enter text to be sent here.");
        outChatTextArea.setText("You can move the separator bar!");
        inChatTextArea.addFocusListener(new FocusListener() {
            public void focusGained(FocusEvent e) {
                if(inChatTextArea.getText().equals("Enter text to be sent here."))
                {
                    inChatTextArea.setText("");
                    inChatTextArea.setFont(new Font("default",Font.BOLD,20));
                }
            }
            public void focusLost(FocusEvent e) {
                if(inChatTextArea.getText().isEmpty())
                {
                    inChatTextArea.setFont (new Font("default",Font.ITALIC,20));
                    inChatTextArea.setText("Enter text to be sent here.");
                }
            }
        });
        chatWindow.getRootPane().setDefaultButton(sendButton);
        chatWindow.setVisible(true);
    }

我查看了所有关于此问题的线程,我无法弄清楚为什么命中ENTER不会激活附加到sendButton的actionPerformed方法。是因为文本字段有FocusListener吗?

我尝试过的事情:

  • 更改语句以定位特定文本字段(inChatTextArea)
  • 将setVisible语句移至末尾
  • 在进入
  • 时定位GUI的不同部分

请记住,我只包含了构建GUI的代码,试图浪费更少的时间。

我想要什么:理想情况下,我想保留我的FocusListener(或类似的东西),以便我可以显示“文本字段提示”。我希望能够在输入inChatTextArea字段时按Enter键发送用户的文本。

1 个答案:

答案 0 :(得分:1)

如果JFrame上的某个组件具有焦点,并且可以接受按下输入键,例如其中一个JTextAreas,则输入按下将转到该组件而不是默认按钮。要使默认按钮起作用,那么JFrame或按钮或其他不接受输入键按下的组件需要具有焦点。我猜你的一个JTextAreas已经把焦点搞得一团糟,这让你很烦恼。