如何解决如何链接ActionListener以便在全局范围内进行监听?
我正在尝试制作一个简单的基于控制台的Swing GUI,将订单和响应分开。我想要做的是制作顺序对话式控制台。例如,将要求玩家键入“游戏”以开始,然后键入玩家的名称以保存并继续。我成功制作了控制台,但不知道如何将用户键入信息链接到动作侦听器。
我所做的如下。
public class ConsolePane extends JPanel {
private final JTextField textField = new JTextField(20);
private final JTextArea textAreaOrder = new JTextArea(20,30);
private ActionListener listener;
private JButton button;
public ConsolePane(ActionListener listener) {
this.listener = listener;
}
public JComponent display() {
textAreaOrder.setText("Game or Exit");
try {
OutputStream os = new StreamWriter(textAreaOrder);
System.setOut(new PrintStream(os,true,"UTF-8"));
} catch (IOException ex) {
ex.printStackTrace();
}
Box box = Box.createHorizontalBox();
box.setBorder(BorderFactory.createEmptyBorder(5,5,5));
box.add(Box.createHorizontalGlue());
box.add(textField);
box.add(Box.createHorizontalStrut(5));
button = new JButton("Enter");
button.setActionCommand("Enter");
button.addActionListener(listener);
box.add(button);
textAreaOrder.setEditable(false);
JPanel p = new JPanel(new BorderLayout());
p.add(new JScrollPane(textAreaOrder));
p.add(box,BorderLayout.SOUTH);
return p;
}
}
和
public class Controller implements ActionListener {
private JFrame frame;
private JTextField textField;
private JTextArea textAreaOrder;
private MainController mc;
private SetUpController suc;
private GameController gc;
private LoadFileUtil fu;
private ActionListener listener;
public Controller() {
// ProcExec instance = new ProcExec(this);
// EventQueue.invokeLater(instance);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
createFrame();
}
});
}
public void run() {
mc = new MainController(frame,this);
suc = new SetUpController(frame,this);
gc = new GameController(frame,this);
suc.start();
}
public void createFrame() {
JFrame frame = new JFrame("Hannah's Mafia Game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new ConsolePane(listener).display());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
@Override
public void actionPerformed(ActionEvent e) {
String name = textField.getText();
switch(name) {
case "game":
textAreaOrder.setText("Type players");
//instance.run();
break;
case "exit":
textAreaOrder.setText("Game Done");
//instance.run();
break;
}
}
}````
解决方法
我已经检查了您的代码,并且您的textfield
存在ConsolePane
类和Controller
类->它们是不同的。在get()
类中创建一个ConsolePane
方法,以获取输入到此JTextField
的文本。
尝试在ConsolePane
中使用此方法:
public String getJTextField(){
return textField.getText();
}
然后替换:
String name = textField.getText();
-----> String name = getJTextField();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。