actionPerformed 中的 setLocation 仅当没有整数递增时才更改按钮位置
setLocation in actionPerformed change button location only if there are no integer incrementation
import javax.swing.*;
import java.awt.event.*;
public class SimpleGUI3 implements ActionListener {
JButton button;
private int numClick;
public static void main(String[] args) {
SimpleGUI3 gui = new SimpleGUI3();
gui.go();
}
public void go() {
JFrame frame = new JFrame();
button = new JButton("Click me.");
button.addActionListener(this);
frame.getContentPane().add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
button.setLocation(100, 100); //This code do not change the button location if numClick++ (next row) used.
numClick++; //If comment numClick++ the button changes location on click. Why location doesn't changes if this row uncomment?
button.setText("Has been clicked " + numClick + " times.");
}
}
问题是:
为什么在代码中没有 numClick++ 的情况下单击时位置会发生变化,如果 numClick++ 在代码中起作用,为什么按钮位置不会改变?
当您更改 numClick 的值时,当您使用 setText()
方法时,按钮的文本也会更改。
当按钮的 属性 发生变化时,Swing 将自动调用组件上的 revalidate()
和 repaint()
。
revalidate()
会调用布局管理器,布局管理器会根据布局管理器的规则将按钮的位置重置回(0, 0),默认为BorderLayout框架的内容窗格。
底线是不要试图管理组件的位置或大小。那是布局管理器的工作。
此外,学习和使用 Java 命名约定。 Class 名称应以大写字符开头。
阅读 Swing tutorial 了解 Swing 基础知识。
import javax.swing.*;
import java.awt.event.*;
public class SimpleGUI3 implements ActionListener {
JButton button;
private int numClick;
public static void main(String[] args) {
SimpleGUI3 gui = new SimpleGUI3();
gui.go();
}
public void go() {
JFrame frame = new JFrame();
button = new JButton("Click me.");
button.addActionListener(this);
frame.getContentPane().add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
button.setLocation(100, 100); //This code do not change the button location if numClick++ (next row) used.
numClick++; //If comment numClick++ the button changes location on click. Why location doesn't changes if this row uncomment?
button.setText("Has been clicked " + numClick + " times.");
}
}
问题是: 为什么在代码中没有 numClick++ 的情况下单击时位置会发生变化,如果 numClick++ 在代码中起作用,为什么按钮位置不会改变?
当您更改 numClick 的值时,当您使用 setText()
方法时,按钮的文本也会更改。
当按钮的 属性 发生变化时,Swing 将自动调用组件上的 revalidate()
和 repaint()
。
revalidate()
会调用布局管理器,布局管理器会根据布局管理器的规则将按钮的位置重置回(0, 0),默认为BorderLayout框架的内容窗格。
底线是不要试图管理组件的位置或大小。那是布局管理器的工作。
此外,学习和使用 Java 命名约定。 Class 名称应以大写字符开头。
阅读 Swing tutorial 了解 Swing 基础知识。