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

我需要帮助将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://sofzh.miximages.com/java/Te3z0kv.png

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

 this.getContentPanel().setLayout(null); 

使用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; } 

}

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

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