我在使用Swing中的组件进行交互或采取行动的方式上遇到了问题。我的计划是在按下按钮时禁用/启用JTextPane,然后输入数字,以便程序可以开始计算。到目前为止,这是我所坚持的地方:
private JPanel contentPane;
protected JTextPane txtpnA;
protected JTextPane txtpnB;
protected JTextPane txtpnC;
/* Button 'a' **/
JButton btnA = new JButton("a");
btnA.setBackground(Color.YELLOW);
btnA.setBounds(47, 54, 89, 23);
btnA.setActionCommand("a");
btnA.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
} {
}
});
contentPane.add(btnA);
/* TextPane 'a' **/
txtpnA = new JTextPane();
txtpnA.setBounds(47, 88, 89, 20);
contentPane.add(txtpnA);
txtpnA.setBorder(BorderFactory.createLineBorder(Color.black));
这是方法:
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();
if(command.equals("a"))
{
txtpnA.setEnabled(false);
} else if(command.equals("b"))
{
txtpnB.setEnabled(false);
} else if(command.equals("c"))
{
txtpnC.setEnabled(false);
}
}
}
我很难找到有关JComponents之间通信的文章。如果您还可以建议详细的来源,将不胜感激。
答案 0 :(得分:2)
我建议您创建一个新类,该类可以处理对特定组件的请求,并且不要使用匿名事件处理程序:
public class ButtonHandler extends AbstractAction {
private JComponent componentToDisable;
public ButtonHandler(JComponent comp, String text) {
super(text);
componentToDisable = comp;
}
public void actionPerformed(ActionEvent event) {
componentToDisable.setEnabled(false);
}
}
如何使用它:
/* TextPane 'a' **/
txtpnA = new JTextPane();
txtpnA.setBounds(47, 88, 89, 20);
contentPane.add(txtpnA);
txtpnA.setBorder(BorderFactory.createLineBorder(Color.black));
JButton btnA = new JButton(new ButtonHandler(textpnA, "a"));
btnA.setBackground(Color.YELLOW);
btnA.setBounds(47, 54, 89, 23);
contentPane.add(btnA);
其他按钮的操作步骤相同。
JButton btnB = new JButton(new ButtonHandler(textpnB, "b"));
JButton btnC = new JButton(new ButtonHandler(textpnC, "c"));
最后但并非最不重要的一点。正如安德鲁·汤普森(Andrew Thompson)所述:
Java GUI必须在不同的区域中使用不同的PLAF在不同的OS,屏幕大小,屏幕分辨率等上工作。因此,它们不利于像素的完美布局。取而代之的是使用布局管理器,或将它们与布局填充和边框一起用于空白。
答案 1 :(得分:0)
如果我正确理解您的问题,则想创建一个通用的ActionListener,它将通过您的按钮调用。
您可以在具有这些按钮的班级中创建内部私有班级。并将该内部类的实例添加到button的ActionListener。
public class MyClass {
//...//
JButton a = new JButton("a");
a.setActionCommand("a");
a.setBounds(0, 0, 50, 50);
a.addActionListener(new ActionButtons());
//...//
private class ActionButtons implements ActionListener{
@Override
public void actionPerformed(ActionEvent arg0) {
String action = arg0.getActionCommand();
if(action.equals("a")) {
System.out.println("a");
}
if(action.equals("b")) {
System.out.println("b");
}
if(action.equals("c")) {
System.out.println("c");
}
}
}
}
P.S .:如果要在多个类中使用该ActionListener,则可以在其他类文件中将其声明为公共类。