当前位置: 首页 > 知识库问答 >
问题:

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

祝宏放
2023-03-14

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

  • 1帧
  • 1个集装箱
  • 2个JPanel对象(确保不会混淆面板、容器和框架对象)
  • 1滚动的对象
  • 1个JTextArea和1个JTextField
  • 1个JButtonGroup,与3个JRadioButton关联

它的目的就像一个人聊天。在文本字段中写入,提交按钮,并将其打印在文本区域中,作为之前任何消息的附件。下一步,我将3个单选按钮命名为“用户1”、“用户2”和“用户3”,它们将在选择中打印:User_x.GetName(String)message;

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

    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。(这是一个原型)

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

此updateSystemMessage()调用此方法:

    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的参数。

我已经试过这样的方法:

   private void updateSystemMessage() {
    JRadioButton jrb = (JRadioButton)this.bGroup.getSelection();
    this.system =jrb.getText();
}

但它不起作用,因为bGroup。getSelection()返回一个不能转换为(JRadioButton)的ButtonModel。所以有这样的方法吗?或者我必须为每个JRadioButton编写一个方法(谁基本上做相同的事情)?

共有1个答案

公冶京
2023-03-14

行动事件。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。设置ActionCommand(“按钮1”),然后使用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;
}
 类似资料:
  • 问题内容: 我有一个可能包含数千个对象的模型。我想知道什么是最有效的方式来存储它们并在获得ID后检索单个对象。ID是长数字。 这些是我正在考虑的两个选项。在选项一中,它是一个带有递增索引的简单数组。在选项2中,如果有区别,它是一个关联数组,也可能是一个对象。我的问题是,当我主要需要检索单个对象时,有时又遍历它们并进行排序时,哪一个效率更高。 具有非关联数组的选项一: 选项2与关联数组: 更新: 好

  • 我更多地练习对象、数组和方法。现在我正在编写一个简单的簿记程序来添加一本书,按标题、作者、价格、库存编号和流派搜索书籍。我有几个问题,一是修复这个程序(在方法fillBook()中添加一本书),二是如何从对象类中删除一本书,三是如何使这个程序更高效 目前正在研究和阅读ioexception类。 这是我得到的错误java:66:错误:类手册中的构造函数手册不能应用于给定的类型 Book tempBo

  • 问题内容: ActionListener和ItemListener均用于通过JCheckBox触发事件? 那么,它们之间有什么区别,在这种情况下,其中一个优先于另一个? 问题答案: 双方还有,在以下情况下都有相同的行为。但是,可以通过调用复选框来触发主要区别。作为编码的做法不都登记以及与以避免不一致。

  • 【代码效率】页面主要反馈和分析项目运行过程中代码的 “CPU占用时间” 和 “堆内存分配” 情况。其中,这里所分析的代码既包含Unity引擎的自身模块代码,也包含您自己书写的逻辑脚本。通过该部分,您将快速掌握项目中逻辑代码的运行性能瓶颈,从而有的放矢地进行改进和优化。 CPU占用时间 函数汇总 该项主要显示项目运行过程中具有较高CPU占用的函数列表,包括函数的 “总CPU耗时”、“最大单次CPU占

  • 主要内容:1 Java JRadioButton的介绍,2 Java JRadioButton的声明,3 Java JRadioButton的构造方法,4 Java JRadioButton的方法,5 Java JRadioButton的案例1,6 Java JRadioButton的案例21 Java JRadioButton的介绍 JRadioButton类用于创建单选按钮。它用于从多个选项中选择一个选项。它广泛用于考试系统或测验中。 应该将其添加到ButtonGroup中,以仅选择一个单选

  • 问题内容: 如果一个方法填充/修改了一个对象,是否最好返回该对象或将返回类型保持为空,并且该方法将通过其引用来修改该对象? 我知道这是一个琐碎的问题,但是哪个是最优选的? 问题答案: 我取决于您的样式,但是返回的优点之一是:您可以调用,即可以链接方法调用。 例如,看看这是怎么做的,它允许这样的事情