每次点击按钮时如何更改按钮的位置?它工作,但只是我第一次点击它。
import javax.swing.*;
import java.awt.event.*;
public class Viewer {
private static JButton b1 = new JButton("Action Listener");
private static JFrame f = new JFrame();
private static JPanel p = new JPanel();
public static void main(String[]args){
f.setVisible(true);
f.setSize(400,400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p.add(b1);
f.add(p);
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
b1.setLocation(100,100);
}
});
}
}
答案 0 :(得分:3)
默认情况下,JPanel
使用FlowLayout
。这意味着对组件位置的任何更改只是临时的,并且布局管理器将在下次布置容器时“重置”。移动按钮后尝试调整框架的大小
正如@JoshM已被指出的那样,您只需将按钮移动到每次点击的同一位置。
问题是,为什么要移动按钮?
答案 1 :(得分:2)
<强>声明强>
这是不您希望如何做到这一点!正如MadProgrammer指出的那样,一旦面板失效,这个结果就不会持续。这只是为什么你没有得到你想要的结果的一个例子。
每次调用你的actionPerformed()
方法,只是每次执行时都将按钮放在同一个地方。如果您想要它,让我们说,每次点击时向右移动10,尝试这样的事情。
import javax.swing.*;
import java.awt.event.*;
public class Viewer {
private static JButton b1 = new JButton("Action Listener");
private static JFrame f = new JFrame();
private static JPanel p = new JPanel();
private static int location = 100; //Make a variable for location
public static void main(String[]args){
f.setVisible(true);
f.setSize(400,400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p.add(b1);
f.add(p);
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
b1.setLocation(location,100);
location += 10; //This will change where it draws next time
}
});
}
}
另外,你使用静态是非常错误的。你正在使用它,所以你可以在main()中执行所有这些,但你需要的是Swing的EDT here。