简体   繁体   English

我如何组织这样的框架?

[英]How can i organize my frame like this?

I want my frame to have 3 panels that will look like that 我希望我的框架具有3个看起来像这样的面板

在此处输入图片说明

I'm a total newbie at JPanel and i cant organize it, so if someone can help i'd appreciate it 我是JPanel新手,我无法组织它,所以如果有人可以帮忙,我将不胜感激

Start by having a look at Laying Out Components Within a Container . 首先看一下容器中的组件布局 While you could use a GridBagLayout , you could simply use a series of compound containers using BorderLayouts 虽然可以使用GridBagLayout ,但是可以使用BorderLayouts来简单地使用一系列复合容器

For example... 例如...

JPanel left = new JPanel(new BorderLayout());
left.add(new TestPane(), BorderLayout.NORTH);
left.add(new TestPane());

JPanel main = new JPanel(new BorderLayout());
main.add(left);
main.add(new TestPane(), BorderLayout.EAST);

简单版式

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JPanel left = new JPanel(new BorderLayout());
                left.add(new TestPane(), BorderLayout.NORTH);
                left.add(new TestPane());

                JPanel main = new JPanel(new BorderLayout());
                main.add(left);
                main.add(new TestPane(), BorderLayout.EAST);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(main);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setBorder(new LineBorder(Color.RED));
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

    }

}

You must use a LayoutManager . 您必须使用LayoutManager

There's plenty of information about SWING and layout manager on the net. 网上有很多关于SWING和布局管理器的信息。

Check 校验

Or just google for SWING and layout. 或者只是谷歌摇摆和布局。

I prefer to use BorderLayout to arrange my panels. 我更喜欢使用BorderLayout来安排我的面板。 I set up 3 panels: east (width 100px), north(height 100px) and center: 我设置了3个面板:东(宽100px),北(高100px)和中心:

public class Frame1 extends JFrame {
  BorderLayout borderLayout1 = new BorderLayout();
  JPanel jPanelEast = new JPanel();
  JPanel jPanelCenter = new JPanel();
  JPanel jPanelNorth = new JPanel();
  BorderLayout borderLayout2 = new BorderLaout();
  JPanel jPanelCentral = new JPanel();

  public Frame1() {
    try {
      jbInit();
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
  }

  void jbInit() throws Exception {
    this.getContentPane().setLayout(borderLayout1);

    jPanelEast.setBackground(Color.red);
    jPanelEast.setForeground(Color.black);
    jPanelEast.setMinimumSize(new Dimension(10, 10));
    jPanelEast.setOpaque(true);
    jPanelEast.setPreferredSize(new Dimension(100, 10));

    jPanelCenter.setLayout(borderLayout2);

    jPanelNorth.setBackground(Color.lightGray);
    jPanelNorth.setMinimumSize(new Dimension(10, 10));
    jPanelNorth.setOpaque(true);
    jPanelNorth.setPreferredSize(new Dimension(10, 100));

    this.getContentPane().add(jPanelEast, BorderLayout.EAST);
    this.getContentPane().add(jPanelCenter, BorderLayout.CENTER);
    jPanelCenter.add(jPanelNorth, BorderLayout.NORTH);
    jPanelCenter.add(jPanelCentral, BorderLayout.CENTER);
  }

  public static void main(String[] args) {
    Frame1 frame1 = new Frame1();
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM