JButton:更改按钮的位置

时间:2014-01-20 22:11:54

标签: java eclipse swing

每次点击按钮时如何更改按钮的位置?它工作,但只是我第一次点击它。

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);
            }
        });
    }
}

2 个答案:

答案 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