我有一个 Swing JFrame 面板,其中有 2 个文本字段和一个按钮。我需要该按钮能够触发不同文本字段中文本的更改(具体来说,从“打开”到“关闭”)。复杂的因素是我需要它只更改最后单击的文本区域的文本。
下面是我到目前为止的代码。请注意,单击文本字段本身会切换我想要的文本。但我也希望按钮能够切换文本 - 但仅限用户在单击按钮之前单击的最后一个文本区域中的文本。我现在的方式是按钮切换两个文本字段,这是我不想要的。
我怀疑可能有一种简单的方法来实现我忽略的这一点。
public class SwitchesTest extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new SwitchesTest().displayJFrame();
}
});
}
private void displayJFrame() {
JFrame frame = new JFrame("Switches");
JButton button = new JButton("Switch");
JTextArea switch1 = new JTextArea("On",1,3);
JTextArea switch2 = new JTextArea("On",1,3);
frame.getContentPane().setLayout(new GridBagLayout());
frame.add(switch1);
frame.add(switch2);
frame.add(button);
button.addActionListener(e -> {
switch1.setText("On".equals(switch1.getText()) ? "Off" : "On");
switch2.setText("On".equals(switch2.getText()) ? "Off" : "On");
});
switch1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
switch1.setText("On".equals(switch1.getText()) ? "Off" : "On");
}
});
switch2.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
switch2.setText("On".equals(switch2.getText()) ? "Off" : "On");
}
});
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
最佳答案
未经测试,但只需保存最后单击的文本区域,以便稍后切换。
注意:在我看来,这里使用“静态”开始成为一种反模式。考虑将此类切换为已实例化并在其构造函数中完全初始化的对象。
public class SwitchesTest {
static private JTextArea lastClicked;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
displayJFrame();
}
});
}
static void displayJFrame() {
JFrame frame = new JFrame("Switches");
JButton button = new JButton("Switch");
JTextArea switch1 = new JTextArea("On",1,3);
JTextArea switch2 = new JTextArea("On",1,3);
frame.getContentPane().setLayout(new GridBagLayout());
frame.add(switch1);
frame.add(switch2);
frame.add(button);
button.addActionListener(e -> {
if( lastClicked != null )
lastClicked.setText("On".equals( lastClicked.getText()) ? "Off" : "On");
});
switch1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
switch1.setText("On".equals(switch1.getText()) ? "Off" : "On");
lastClicked = switch1;
}
});
switch2.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
switch2.setText("On".equals(switch2.getText()) ? "Off" : "On");
lastClicked = switch2;
}
});
关于Java 开关按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45900045/