四个面板框架与不同的布局

时间:2014-02-27 17:59:32

标签: java layout panels

我正在尝试在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类中?

此外(抱歉所有问题),如果我在框架类中包含面板设置并包含框架布局,那么它可以工作(正如我刚才提到的)。但是,如果我在框架类中包含面板设置但我不包括框架布局,那么它仅使用框架布局显示最后一个面板。为什么不描绘任何其他面板?

谢谢!

2 个答案:

答案 0 :(得分:0)

默认情况下,Java中的Frames BorderLayoutLayoutManager

所以要将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);