无法在java swing应用程序中设置按钮位置

时间:2012-09-13 13:12:46

标签: java swing layout jbutton layout-manager

我是Java的新手,正在尝试开发一个基本的swing应用程序。我想在JFrame上设置按钮的位置。我试图这样做,但无法做到这一点,这是我的代码。我正在使用eclipse进行开发

public class MyUI extends JFrame {

    JButton button1 = new JButton("Click");
    JTextField tb1 = new JTextField(5);
    JPanel panel1 = new JPanel();

    public MyUI() {
        super("Test");
        setVisible(true);
        this.setLayout(null);
        panel1.setLayout(null);
        panel1.setVisible(true);
        button1.setVisible(true);
        panel1.add(button1);
        add(panel1);
        panel1.setLocation(10, 10);
        button1.setLocation(10, 10);    
        setDefaultCloseOperation(EXIT_ON_CLOSE);    
        button1.addActionListener(this);
    }

    public static void main(String[] args) {
        MyUI gui = new MyUI();
        gui.setSize(400, 300);
    }
}

3 个答案:

答案 0 :(得分:2)

1.为什么你将两个JComponents放到同一个Bounds

panel1.setLocation(10, 10);
button1.setLocation(10, 10);  

2.看看Initials Thread

3。public class MyUI extends JFrame {

应该是

public class MyUI extends JFrame implements ActionListener{ 

4.不要延长JFrame,创建一个局部变量

5. setVisible(true);应该(在这种形式下)只有MyUI()构造函数的最后一行代码

6. setVisible(true);是重要问题,您可以看到JFrame然后添加JComponent(s)

7.不要使用NullLayout,使用正确的LayoutManager,如果您删除this.setLayout(null);panel1.setLayout(null);添加的JComponents可见< / p>

8.在pack()之前使用setVisible(true)作为构造函数

中的最后两行代码行

编辑(使用built_in LayoutManagersBorderLayout JFrameFlowLayout JPanel

import java.awt.event.*;
import javax.swing.*;

public class MyUI extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;
    private JButton button1 = new JButton("Click");
    private JTextField tb1 = new JTextField(5);
    private JPanel panel1 = new JPanel();

    public MyUI() {
        super("Test");
        panel1.add(tb1);
        panel1.add(button1);
        add(panel1);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        button1.addActionListener(this);
        pack();
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                MyUI testing = new MyUI();
            }
        });
    }
}

答案 1 :(得分:0)

您的面板和按钮看不见,因为它们的尺寸为零。添加如下内容:

panel1.setSize(100, 100);
button1.setSize(80, 30);

或使用更方便同时设置位置和大小的setBounds方法:

panel1.setBounds(10, 10, 100, 100);
button1.setBounds(10, 10, 80, 30);

答案 2 :(得分:-1)

想提出一些建议,虽然它不是你问题的直接答案,但从我的观点来看仍然很重要....

您可以使用由NetBeans团队在2005年开发的Group Layout,它非常适合使用....尝试免费使用Google提供的Windows Builder Pro ...可以立即启动并运行您的应用程序......