尝试使用3个JRadiobutton
和2个ItemListener
选择的一组JButton
来实现一组3 ActionListener
s { 。
按下“确定”JButton
后,应检测当前的JRadioButton
选项。
我尝试通过将ActionEvent
和ItemEvent
合并到一个方法中来实现这一点,其中if语句可用于验证按下“确定”时选择了哪个JRadioButton
。
产生的错误消息是method is not abstract and does not override abstract method actionPerformed(ActionEvent) in actionListener
。
当main方法变为抽象时,它将不会实例化。
我尝试在@Override
方法之前放置public void actionPerformed
并使用alt + ins插入覆盖,但这不起作用。
代码如下:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
class MainMenu extends JFrame implements ActionListener, ItemListener {
JPanel pnl = new JPanel();
JPanel grid = new JPanel(new GridLayout(3, 1));
JRadioButton input1 = new JRadioButton("Enter New Information", true);
JRadioButton input2 = new JRadioButton("Load from a CSV file");
JRadioButton input3 = new JRadioButton("Save to a CSV file");
ButtonGroup inputs = new ButtonGroup();
JButton b1 = new JButton("OK");
JButton b2 = new JButton("Cancel");
JTextArea txtArea = new JTextArea(5, 25);
public void actionPerformed(ActionEvent event2, ItemEvent event1) {
txtArea.setText(event2.getActionCommand() + " Clicked");
if (event2.getSource() == b1 && event1.getItemSelectable() == input1) {
System.exit(0);
}
if (event2.getSource() == b1 && event1.getItemSelectable() == input2) {
final JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(null);
System.exit(0);
}
if (event2.getSource() == b1 && event1.getItemSelectable() == input3) {
System.exit(0);
}
if (event2.getSource() == b2) {
System.exit(0);
}
}
public MainMenu() {
super("Main Menu");
setSize(300, 200);
Container contentPane = getContentPane();
ButtonGroup buttonGroup = new javax.swing.ButtonGroup();
inputs.add(input1);
inputs.add(input2);
inputs.add(input3);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(grid);
add(pnl);
grid.add(input1);
grid.add(input2);
grid.add(input3);
grid.setBorder(BorderFactory.createLineBorder(Color.BLACK));
pnl.add(b1);
pnl.add(b2);
pnl.add(txtArea);
b1.addActionListener(this);
b2.addActionListener(this);
input1.addItemListener(this);
input2.addItemListener(this);
input3.addItemListener(this);
contentPane.add("North", grid);
contentPane.add("South", pnl);
setVisible(true);
}
}
答案 0 :(得分:1)
基本上,您违反了ActionListener
和JRadioButton
的合同要求(因为他们希望您传递对实现ItemListener
接口的类的引用)...
你不能简单地#34;化妆"以这种方式回调,您必须满足您实现的接口的要求。
事实上,JRadioButton
更改后你并不在乎,只有在按下Ok
或Cancel
按钮时才关心它们,所以你可以得到它们完全取消ItemListener
要求,只需检查您感兴趣的selected
的{{1}}状态,例如......
JRadioButton
作为一个可运行的例子......
@Override
public void actionPerformed(ActionEvent event2) {
txtArea.setText(event2.getActionCommand() + " Clicked");
Object source = event2.getSource();
if (source == b1 && input1.isSelected()) {
System.exit(0);
}
if (source == b1 && input2.isSelected()) {
final JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(null);
System.exit(0);
}
if (event2.getSource() == b1 && input3.isSelected()) {
System.exit(0);
}
if (event2.getSource() == b2) {
System.exit(0);
}
}
您可能需要仔细查看the Interfaces trail和How to Use Buttons, Check Boxes, and Radio Buttons