Java 无法在JFrame中添加多个JPanel,
我有一个下面的JFrameJava 无法在JFrame中添加多个JPanel,,java,swing,jpanel,Java,Swing,Jpanel,我有一个下面的JFrame public class AddActivityWindow extends JFrame { //declaration of components go here ... public AddActivityWindow(ActivityStore store) { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel pnl_date = new
public class AddActivityWindow extends JFrame {
//declaration of components go here
...
public AddActivityWindow(ActivityStore store) {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pnl_date = new JPanel();
JLabel lbl_date = new JLabel("X");
pnl_date.add(lbl_date);
add(pnl_date);
pnl_activities = new JPanel();
JLabel lbl_act = new JLabel("Y");
pnl_activities.add(lbl_act);
add(pnl_activities);
setLocationRelativeTo(null);
setVisible(true);
}
}
当我创建这个框架时,我希望它会创建一个包含两个面板的框架。但是,我只看到第二个面板(即),我只看到屏幕上的Y
,而不是X
。但是,如果删除第二个面板的代码,则可以看到X
添加第二个面板时会发生什么。为什么第一个面板没有显示在框架中?JFrame的默认布局是
边框布局。BorderLayout
的一个特点是每个区域只能包含一个组件。如果只使用add
方法而不指定任何约束,则与将组件添加到中心
相同。因此,您的第二个add
调用将替换您第一次添加的元素
可能的解决方案:指定约束,例如
add(pnl_date, BorderLayout.NORTH);
//...
add(pnl_activities, BorderLayout.CENTER);
或者为您的JFrame
切换到另一个布局管理器(例如BoxLayout
或FlowLayout
)。这取决于你的需要。请查看,这是选择管理器的良好起点。您应该使用不同的布局管理器,请查看:为您选择一个
这对我来说很好
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class FrameTest extends JFrame {
public FrameTest() {
setLayout(new FlowLayout());
setSize(150, 150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pnl_date = new JPanel();
JLabel lbl_date = new JLabel("X");
pnl_date.add(lbl_date);
add(pnl_date);
JPanel pnl_activities = new JPanel();
JLabel lbl_act = new JLabel("Y");
pnl_activities.add(lbl_act);
add(pnl_activities);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new FrameTest().setVisible(true);
}
});
}
}
在将面板添加到JFrame之前,在JFrame上使用一些布局
,否则它们肯定会相互重叠。。