为什么我无法移动(定位)按钮

时间:2017-02-12 17:08:22

标签: java layout

我尝试在框架中找到我的按钮,或者,如果说实话,我的布局更灵活。但是当我设置像.setBounds这样的属性时,我的按钮没有反应。为什么?感谢任何帮助!

import com.sun.beans.editors.ColorEditor;

    import javax.swing.*;
    import java.awt.*;
    public class windowsInterface extends JFrame{

        windowsInterface(){
            super("When the nearest HB");
            setSize(800, 800);
            JPanel panelForAddDel = new JPanel();
            panelForAddDel.setSize(800, 100);
            panelForAddDel.setLocation(0, 0);
            panelForAddDel.setBackground(Color.gray);

            JTextField nameOfStaff = new JTextField();
            JTextField dateOfBirth = new JTextField();


            JButton addRec = new JButton("Добавить");
            addRec.setBounds(100, 100, 200, 50);
            JButton delRec = new JButton("Удалить");
            delRec.setBounds(100, 100, 200, 50);

            addRec.setBounds(320, 125, 200, 50);
            delRec.setBounds(420, 125, 200, 50);



            JPanel panelForWatch = new JPanel();
            panelForWatch.setLocation(0, 100);
            panelForWatch.setSize(800, 600);
            panelForWatch.setBackground(Color.BLUE);



            add(panelForAddDel);
            add(panelForWatch);


            panelForAddDel.add(nameOfStaff);
            panelForAddDel.add(dateOfBirth);
            panelForAddDel.add(addRec);
            panelForAddDel.add(delRec);


        }
    }

2 个答案:

答案 0 :(得分:2)

  

但是当我设置像.setBounds这样的属性时,我的按钮没有反应。为什么?

因为Java组件中存在默认布局。例如,JFrame使用默认的BorderLayout管理器,该管理器确定JFrame中添加的组件将如何定位和否决您的setBounds()方法,从而给您的印象是它不起作用。

您会意识到,如果您通过将此布局设置为空this.setLayout(null)来移除此布局,则setBounds()似乎会再次运行。

但是,建议您根据需要选择合适的布局,而不是使用null布局。

  • 我建议您将组件添加到JPanel并将JPanel添加到JFrame,而不是直接添加到JFrame中。

  • 为您的JPanel设置合适的布局

  • 如果需要,您可以使用嵌套的JPanel,每个都有不同的布局,以满足您的需求。

答案 1 :(得分:2)

这可能是因为面板的默认布局是流布局。阅读它  http://www.javatpoint.com/FlowLayout。更灵活的布局是GridBagLayout,您可以根据自己的选择更改面板或JFrame的布局。 要了解GridBagLayout:https://www.tutorialspoint.com/swing/swing_gridbaglayout.htm