【问题标题】:How can i organize my frame like this?我怎样才能像这样组织我的框架?
【发布时间】:2015-11-12 07:28:25
【问题描述】:

我希望我的框架有 3 个看起来像那样的面板

我是JPanel 的新手,我无法组织它,所以如果有人可以提供帮助,我将不胜感激

【问题讨论】:

标签: java swing layout jframe jpanel


【解决方案1】:

首先查看Laying Out Components Within a Container。虽然您可以使用GridBagLayout,但您可以简单地使用一系列使用BorderLayouts 的复合容器

例如...

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);
        }

    }

}

【讨论】:

  • @noam 很高兴它可以提供帮助
【解决方案2】:

您必须使用LayoutManager

网上有很多关于 SWING 和布局管理器的信息。

检查

或者只是谷歌搜索 SWING 和布局。

【讨论】:

    【解决方案3】:

    我更喜欢使用BorderLayout 来安排我的面板。我设置了 3 个面板:东(宽 100 像素)、北(高 100 像素)和中心:

    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();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 2022-01-24
      • 2014-12-31
      • 2015-07-30
      相关资源
      最近更新 更多