Java编码效率。 JRadioButton对象与ItemListener的交互

时间:2018-12-12 20:27:07

标签: java performance swing jradiobutton itemlistener

我最近开始用Java进行编码。我想编写一个包含以下内容的窗口:

  • 1帧
  • 1个容器
  • 2个JPanel对象(以确保不会混淆Panels,Container和Frame的对象)
  • 1个滚动对象
  • 1个JTextArea和1个JTextField
  • 与3个JRadioButton相关联的1个JButtonGroup

其目的就像一个人聊天。在TextField中编写,提交按钮,并在TextArea中将其打印在任何先前的消息后面。 下一步,我将3个单选按钮分别命名为“用户1”,“用户2”和“用户3” 根据他们的选择,他们将打印:user_x.GetName +(String)message;

我的第一个尝试是ActionListener。 (这是一个原型):

  ID     mean min max
1  1 387.8158 326 507
2  2 321.0800 172 498

第二次尝试使用ItemListener。 (这是一个原型)

    ActionListener updateUserTalking = new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent arg0) {
        JTextField tf = textField; //New message
        JTextArea ta = textArea; //Previous message to track an history
        String str = ta.getText()+"Radio button changed"; //This should print "User_x"
        str = str+tf.setText(str+System.lineSeparator());
    }
};

此updateSystemMessage()调用此方法:

    public void itemStateChanged(ItemEvent e) {
        updateSystemMessage();  

最新打印一条双信息。因为共享相同的方法。因此,当选择更改时,有两个换向,因此该方法将被调用两次。 这是我的问题:

我知道我可以为每个JRadioButton设置一个方法。我在猜测是否有办法使一种独特的方法可行。选定的JRadioButton会将其名称作为参数提供给ActionListener或ItemListener。

我已经尝试过这样的事情:

    ItemListener updateSystemMessage = new ItemListener(){
    public void itemStateChanged(ItemEvent e) {
        JTextField tf = textField; //New message
        JTextArea ta = textArea; //Previous message to track an history
        String str = ta.getText()+"RadioButton changed"; //This should print "User_x"
        str = str+tf.setText(str+System.lineSeparator());
    }
};

但是它不起作用,因为bGroup.getSelection()返回了一个不能转换为(JRadioButton)的ButtonModel。因此有没有这样的方法?还是我必须为每个JRadioButton编写一个方法(基本上谁做同样的事情)?

1 个答案:

答案 0 :(得分:1)

ActionEvent.getSource()将返回在其中生成的JRadioButton,因此您可以

ActionListener updateUserTalking = new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
    JTextField tf = textField; //New message
    JTextArea ta = textArea; //Previous message to track an history
    JRadioButton jrb = (JRadioButton) arg0.getSource();
    String str = ta.getText()+"Button "+jrb.getLabel();
    str = str+tf.setText(str+System.lineSeparator());
}

或者,您调用JRadioButton.setActionCommand(“ button1”),然后使用ActionEvent.getActionCommand()为每个按钮传递唯一的字符串。

JRadioButton user1 = new JRadioButton("User_1");
user1.setActionCommand("User_1");

ActionListener updateUserTalking = new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
    JTextField tf = textField; //New message
    JTextArea ta = textArea; //Previous message to track an history
    String cmd = arg0.getActionCommand();
    String str = ta.getText()+"Button "+cmd;
    str = str+tf.setText(str+System.lineSeparator());
}

或者,您也可以将actionCommand与ButtonModel一起使用。

private void updateSystemMessage() {
    String actionCommand = this.bGroup.getSelection().getActionCommand();
    this.system = actionCommand;
}