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

时间:2013-11-25 15:08:42

标签: 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.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

我不需要LayoutManager作为JPanel的位置,因为我需要将JPanel放在特定位置(如示例中的150,150)。 但是,如果我像上面的代码一样执行panel.setLocation(150,150),则没有任何反应,并且JPanel保留在框架的北中心(如果我更改x,y数字而不是150,150)。

它显示如下:

http://i.imgur.com/Te3z0kv.png

3 个答案:

答案 0 :(得分:3)

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

this.getContentPanel().setLayout(null);

答案 1 :(得分:2)

使用setBounds(new Rectangle(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;
}

}

答案 2 :(得分:0)

默认情况下,JFrame对象使用borderlayout管理器,JPanels默认使用framelayout管理器。 如果你想使用绝对定位,你必须使用空布局,因为任何其他布局管理器将根据自己的情绪使用setLocation()和setSize()方法,而不是根据你的需要。

摘要:使用setLayout(null)并使用null manager然后使用setBounds(X,Y,width,height)方法。