框架中的四个面板,具有不同的布局



我正在尝试设计一个在 4 个单帧中具有 1 个不同面板的界面。我在下面的代码中包含 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 类中?

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

谢谢!!

您必须首先制作包含至少四个JPanel的框架。使用GridLayout探索一些,而不是单独制作每个面板并添加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);

默认情况下,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);
  }
}

相关内容

  • 没有找到相关文章

最新更新