首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java编码效率。JRadioButton对象和ItemListener交互

Java编码效率。JRadioButton对象和ItemListener交互
EN

Stack Overflow用户
提问于 2018-12-13 04:27:07
回答 1查看 38关注 0票数 1

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

  • 1 Frame
  • 1 Container
  • 2 JPanel objects (确保不混淆面板、容器和框架的对象)
  • 1 Scroll's object
  • 1个JTextArea和1个JTextField
  • 1个JButtonGroup和3个JRadioButton关联

它的目的就像一个人聊天。在TextField中写入submit按钮,并将其打印在TextArea中,并附加到之前的任何消息中。下一步,我命名3个单选按钮“用户1",”用户2“和”用户3“在他们的选择上,他们将打印:user_x.GetName+(字符串)消息;

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

代码语言:javascript
复制
    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());
    }
};

我的第二次尝试是ItemListener。(这是一个原型)

代码语言:javascript
复制
    public void itemStateChanged(ItemEvent e) {
        updateSystemMessage();  

此updateSystemMessage()调用此方法:

代码语言:javascript
复制
    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());
    }
};

最新的打印了一个双倍的消息。因为相同的方法是共享的。因此,当选择发生变化时,会有两次替换,因此此方法将被调用两次。我的问题来了:

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

我已经尝试过这样的东西:

代码语言:javascript
复制
   private void updateSystemMessage() {
    JRadioButton jrb = (JRadioButton)this.bGroup.getSelection();
    this.system =jrb.getText();
}

但是它不起作用,因为bGroup.getSelection()返回一个不能转换为(JRadioButton)的ButtonModel。那么有没有这样的办法呢?或者我必须为每个JRadioButton编写一个方法(他们基本上做同样的事情)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-13 05:02:44

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

代码语言:javascript
复制
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()为每个按钮传递一个惟一的字符串。

代码语言:javascript
复制
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一起使用。

代码语言:javascript
复制
private void updateSystemMessage() {
    String actionCommand = this.bGroup.getSelection().getActionCommand();
    this.system = actionCommand;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53750830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档