【问题标题】:How I can do swing complex layout Java [closed]我如何做复杂的布局Java [关闭]
【发布时间】:2014-10-16 18:51:51
【问题描述】:

我需要有关 java swing 布局的帮助。我想做任何类似的事情(请看图片):

http://i1374.photobucket.com/albums/ag420/Bruno_Freitas/PROGRAMADEPONTUACcedilAtildeO_zpsebaf314e.jpg

我尝试放置网格包布局,但我无法插入内容为 10:00 的浮动 JPanel(在图像上)。谁能帮帮我?

【问题讨论】:

标签: java swing gridbaglayout miglayout


【解决方案1】:

在大多数情况下,您通常需要考虑使用多种布局,但在您的情况下,GridBagLayout 应该能够实现您想要的基本布局

对于需要展开多列的组件,可以使用GridBagConstraints#gridwidth,同样,对于需要展开多行的组件GridBagConstraints#gridheight

作为一个整体,将你的布局要求分解为各个责任区域,例如,他们自己的记分卡有自己的布局要求,应该是自包含的组件,这将降低布局的复杂性。

更新

您可以在单个容器中进行(核心)布局,但这很容易破坏,相反,您应该尝试将 UI 分解为多个部分...

这是我看到的两个核心部分,其中有小节,但这是我开始的地方......

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;

public class LayoutTest {

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

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

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

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.gridheight = GridBagConstraints.REMAINDER;
            gbc.weighty = 1;
            gbc.fill = GridBagConstraints.HORIZONTAL;

            add(new ScoreCardsPane(), gbc);

            gbc.gridx = 1;
            add(new TimePane(), gbc);
        }

    }

    public class TimePane extends JPanel {

        public TimePane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.insets = new Insets(4, 4, 4, 4);

            add(createScoreCard(), gbc);
            gbc.gridx++;
            add(createScoreCard(), gbc);

            gbc.gridx = 0;
            gbc.gridy = 2;
            add(createScoreCard(), gbc);
            gbc.gridx++;
            add(createScoreCard(), gbc);

            gbc.gridx = 0;
            gbc.gridy = 1;
            gbc.weightx = 1;
            gbc.weighty = 1;
            gbc.anchor = GridBagConstraints.EAST;
            gbc.gridwidth = 3;
            add(new TimeCard(), gbc);
        }

    }

    public class TimeCard extends JPanel {

        public TimeCard() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.weightx = 1;
            gbc.fill = GridBagConstraints.HORIZONTAL;

            add(new JLabel("TEMPO"), gbc);
            JLabel time = new JLabel("10:00");
            time.setBorder(new LineBorder(Color.BLACK));
            add(time, gbc);
        }

    }

    public class ScoreCardsPane extends JPanel {

        public ScoreCardsPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.insets = new Insets(4, 4, 4, 4);
            gbc.anchor = GridBagConstraints.WEST;

            JLabel topLabel = new JLabel("PONTOS");
            add(topLabel, gbc);
            JLabel bottomLabel = new JLabel("PONTOS");
            gbc.gridy = 3;
            add(bottomLabel, gbc);

            gbc.anchor = GridBagConstraints.CENTER;
            gbc.gridy = 1;
            gbc.gridwidth = 1;

            add(createScoreCard(), gbc);
            gbc.gridx++;
            add(createScoreCard(), gbc);
            gbc.gridx++;
            add(createScoreCard(), gbc);

            gbc.gridy++;
            gbc.gridx = 0;

            add(createScoreCard(), gbc);
            gbc.gridx++;
            add(createScoreCard(), gbc);
            gbc.gridx++;
            add(createScoreCard(), gbc);

        }

    }

    protected static JPanel createScoreCard() {

        JPanel card = new JPanel() {

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

        };
        card.setBackground(Color.RED);

        return card;

    }

}

【讨论】:

    猜你喜欢
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多