Java 为什么我不能移动(定位)按钮

Java 为什么我不能移动(定位)按钮,java,layout,Java,Layout,我试着将我的按钮定位在从框架到中心的位置,或者说实话,让我的布局更灵活。但是,当我设置属性(如.setBounds)时,我的按钮没有反应。为什么?谢谢你的帮助 import com.sun.beans.editors.ColorEditor; import javax.swing.*; import java.awt.*; public class windowsInterface extends JFrame{ windowsInterface(){

我试着将我的按钮定位在从框架到中心的位置,或者说实话,让我的布局更灵活。但是,当我设置属性(如
.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);


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

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

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

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

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

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

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

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

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

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

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

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

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

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


这可能是因为面板的默认布局是flow layout。读一读 . 更灵活的布局是GridBagLayout,您可以根据自己的选择更改面板或JFrame的布局。
要了解GridBagLayout:

这可能是因为面板的默认布局是flow布局。读一读 . 更灵活的布局是GridBagLayout,您可以根据自己的选择更改面板或JFrame的布局。
要了解GridBagLayout:

我建议您首先在面板上使用一个简单的
FlowLayout
。阅读Swing教程中关于的部分,了解更多信息和可下载并使用的工作代码示例。我建议您从面板上使用简单的
FlowLayout
开始。阅读Swing教程中的部分,了解更多信息和可下载并使用的工作代码示例。我尝试过这样做。但我不明白我应该在哪里打开“布局”属性!我试着把它放在按钮前面-没有结果,试着这样做面板-和同样的情况(也许你可以指出我应该在哪里键入这个属性。在你的构造函数中,无论是自定义的JFrame还是JPanel。如果你使用JPanel,它已经有了一个默认的FlowLayout,我想你可以在尝试其他布局之前先试用一下,看看它是如何工作的。我试过了。但我不知道应该在哪里启用“layout”属性是的!我试着把它放在按钮前面-没有结果,试着这样做面板-和同样的情况(可能是你可以指出我应该在哪里键入这个属性。在你的构造函数中,无论是定制的JFrame还是JPanel。如果你使用JPanel,它已经有了一个默认的FlowLayout,我想你可以先试用一下,看看它是如何工作的,然后再尝试其他布局。)。