我需要帮助将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)。
它显示如下:
答案 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)方法。