Java 编码效率。 JRadioButton 对象与 ItemListener 交互
Java coding efficiency. JRadioButton objects and ItemListener interaction
我最近在 Java 开始编码。我想编写一个 Window,其中包含:
- 1 帧
- 1 个容器
- 2 个 JPanel 对象(确保不混淆 Panels、Container 和 Frame 的对象)
- 1 个 Scroll 的对象
- 1 个 JTextArea 和 1 个 JTextField
- 1 个 JButtonGroup 与 3 个关联的 JRadioButton
它的目的就像一个人聊天。在 TextField 中写入,提交按钮并将其打印在附加到任何先前消息的 TextArea 中。
下一步,我将 3 个单选按钮命名为 "User 1"、"User 2" 和 "User 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());
}
};
最新打印一条双信息。因为共享相同的方法。 So when selection is changed there are two commutation so this method will be called twice.
我的问题来了:
我知道我可以为每个实例化的 JRadioButton 创建一个方法。我在猜测是否有办法使独特的方法可行。在选择的 JRadioButton 的位置将其名称作为 ActionListener 或 ItemListener 的参数。
我已经尝试过类似的方法:
private void updateSystemMessage() {
JRadioButton jrb = (JRadioButton)this.bGroup.getSelection();
this.system =jrb.getText();
}
但它不起作用,因为 bGroup.getSelection() return 一个不能转换为 (JRadioButton) 的 ButtonModel。那么有没有这样的方法呢?或者我必须为每个 JRadioButton 编写一个方法(谁基本上做同样的事情)?
ActionEvent.getSource() 将 return 中生成的 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;
}
我最近在 Java 开始编码。我想编写一个 Window,其中包含:
- 1 帧
- 1 个容器
- 2 个 JPanel 对象(确保不混淆 Panels、Container 和 Frame 的对象)
- 1 个 Scroll 的对象
- 1 个 JTextArea 和 1 个 JTextField
- 1 个 JButtonGroup 与 3 个关联的 JRadioButton
它的目的就像一个人聊天。在 TextField 中写入,提交按钮并将其打印在附加到任何先前消息的 TextArea 中。 下一步,我将 3 个单选按钮命名为 "User 1"、"User 2" 和 "User 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());
}
};
最新打印一条双信息。因为共享相同的方法。 So when selection is changed there are two commutation so this method will be called twice. 我的问题来了:
我知道我可以为每个实例化的 JRadioButton 创建一个方法。我在猜测是否有办法使独特的方法可行。在选择的 JRadioButton 的位置将其名称作为 ActionListener 或 ItemListener 的参数。
我已经尝试过类似的方法:
private void updateSystemMessage() {
JRadioButton jrb = (JRadioButton)this.bGroup.getSelection();
this.system =jrb.getText();
}
但它不起作用,因为 bGroup.getSelection() return 一个不能转换为 (JRadioButton) 的 ButtonModel。那么有没有这样的方法呢?或者我必须为每个 JRadioButton 编写一个方法(谁基本上做同样的事情)?
ActionEvent.getSource() 将 return 中生成的 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;
}