我正在尝试在1个单帧中设计一个包含4个不同面板的界面。我在下面的代码中包含了2个面板描述。
以下是我的代码的一部分:
public class finalFrame extends JFrame {
PanelA a = new PanelA()
PanelB b = new PanelB()
// ...
public finalFrame() {
super();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//...
//...
//...
add(a);
add(b);
}
}
class PanelA extends JPanel {
JButton bt = new JButton();
add(bt);
//...
}
class PanelB extends JPanel {
// ...
//... }
class Program {
public static void main(String [] args) {
finalFrame fr = new finalFrame();
}
}
此代码似乎不起作用(它只显示奇数大小的最后一个面板(不是我想要的))。然而,当我在框架类(而不是单独的面板类)中设置不同的面板时,它完美地工作。为什么我不能使用不同的面板类,然后将它们全部添加到最后的Frame类中?
此外(抱歉所有问题),如果我在框架类中包含面板设置并包含框架布局,那么它可以工作(正如我刚才提到的)。但是,如果我在框架类中包含面板设置但我不包括框架布局,那么它仅使用框架布局显示最后一个面板。为什么不描绘任何其他面板?
谢谢!
答案 0 :(得分:0)
默认情况下,Java中的Frames
BorderLayout
为LayoutManager
。
所以要将panel
添加到Frame
,您可以执行以下操作:
frame.add(panel, BorderLayout.NORTH);
frame.add(panel, BorderLayout.WEST);
frame.add(panel, BorderLayout.SOUTH);
frame.add(panel, BorderLayout.EAST);
frame.add(panel, BorderLayout.CENTER);
这些值有效且有效。 如果您在将四个不同的面板添加到框架中时使用上面的4个不同位置,那么您的面板将可见。
以下是使用GridLayout
添加四个面板的演示:
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class GridFrame extends JFrame
{
private static final long serialVersionUID = 1L;
public GridFrame()
{
super("Grid Demo");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new GridLayout(2, 2));
add(new PanelA());
add(new PanelB());
add(new PanelC());
add(new PanelD());
setSize(500, 500);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args)
{
// Call Swing stuff like this, since Swing is not thread safe.
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new GridFrame();
}
});
}
}
class PanelA extends JPanel
{
private static final long serialVersionUID = 1L;
public PanelA()
{
setBackground(Color.RED);
}
}
class PanelB extends JPanel
{
private static final long serialVersionUID = 1L;
public PanelB()
{
setBackground(Color.BLUE);
}
}
class PanelC extends JPanel
{
private static final long serialVersionUID = 1L;
public PanelC()
{
setBackground(Color.YELLOW);
}
}
class PanelD extends JPanel
{
private static final long serialVersionUID = 1L;
public PanelD()
{
setBackground(Color.GREEN);
}
}
答案 1 :(得分:0)
您必须首先制作包含至少四个JPanel
的框架。使用GridLayout
探索一些,而不是单独制作每个Panel并添加JFrame
像这样的东西:
frame.setLayout(new GridLayout(2,2));
frame.add(new Panel2().getPanel());
frame.add(new Panel2().getPanel());
frame.add(new Panel3().getPanel());
frame.add(new Panel4().getPanel());
frame.setSize(100,100);
frame.setVisible(true);