Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JPanel定位在JFrame中的特定位置_Java_Swing_Jpanel - Fatal编程技术网

Java 将JPanel定位在JFrame中的特定位置

Java 将JPanel定位在JFrame中的特定位置,java,swing,jpanel,Java,Swing,Jpanel,我需要帮助将JPanel定位到Jframe的特定位置 我在一个扩展JFrame的类中有一个JPanel,我需要将这个JPanel放在一个特定的x,y位置 是这样的: public class Frame extends JFrame { public Frame(){ this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setLocation(250, 250); this.setSiz

我需要帮助将JPanel定位到Jframe的特定位置

我在一个扩展JFrame的类中有一个JPanel,我需要将这个JPanel放在一个特定的x,y位置

是这样的:

public class Frame extends JFrame {

    public Frame(){

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLocation(250, 250);
        this.setSize(300,300);
        this.setVisible(true);

        JPanel panel = new JPanel();
        this.add(panel);
        panel.setLocation(150, 150);
        panel.add(new JButton("Hello!")); // just to show JPanel

    }//Frame()
}//Frame
对于JPanel的职位,我不需要一个布局经理,因为我需要将该JPanel放在一个特定的位置(比如示例中的150150)。 但是,如果我像上面的代码那样使用panel.setLocation(150150),什么也不会发生,JPanel仍然保持在帧的北中心(如果我更改x,y编号而不是150150)

它显示如下:

public class Frame extends JFrame {

    public Frame(){

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLocation(250, 250);
        this.setSize(300,300);
        this.setVisible(true);

        JPanel panel = new JPanel();
        this.add(panel);
        panel.setLocation(150, 150);
        panel.add(new JButton("Hello!")); // just to show JPanel

    }//Frame()
}//Frame

在框架的内容面板中,布局管理器默认为BorderLayout(NWSE+C)。做:


JFrame对象默认使用borderlayout管理器,JPanel默认使用framelayout管理器。 如果要使用绝对定位,则必须使用null布局,因为任何其他布局管理器都将根据其自身的情绪而不是您想要的方式使用setLocation()和setSize()方法

小结:使用setLayout(null)和null管理器,然后使用setBounds(X,Y,width,height)方法。

使用setBounds(新矩形(96,67,98,41)); 你可以这样做。。。 看看这个例子

/**
 * This method initializes this
 *
 * @return void
 */
private void initialize() {
    this.setSize(300, 200);
    this.setContentPane(getJContentPane());
    this.setTitle("JFrame");
}

/**
 * This method initializes jContentPane
 *
 * @return javax.swing.JPanel
 */
private JPanel getJContentPane() {
    if (jContentPane == null) {
        jContentPane = new JPanel();
        jContentPane.setLayout(null);
        jContentPane.add(getLoginButton(), null);
    }
    return jContentPane;
}

}

对于绝对定位,您需要使用空布局管理器。有关更多信息,请参阅。谢谢!这就是我想要的!:D@Graffio31据我所知,不建议绝对定位如果调整包含容器的窗口的大小,则使用绝对定位容器创建容器可能会导致问题@涂鸦31,
我需要把JPanel放在一个特定的位置(比如示例的150150)。
-这不是使用空布局的理由。硬编码值是一个愚蠢的想法。总有更好的方法可以做到这一点。例如,在面板周围放置一个
EmptyBorder
。任何建议使用空布局的人都应该投反对票。使用空布局会导致很多问题,特别是对于不了解Swing工作原理的初学者来说。@Suganthan好的,谢谢!但在我的情况下,我必须这样做。setresizeable(false)这样绝对定位是可能的,没有问题:)@Graffio31,这不是正确的解决方案。我给了你一个更好的选择。学习如何利用Swing。使用布局管理器是一项功能强大的功能,无论您是否使用调整大小。-1此错误建议是20分钟前提出的。没有必要用重复的建议来扰乱论坛。