0

作为项目的一部分,我们必须有 9 个盒子,在这里我刚刚实现了交替颜色作为示例来代替我们应该使用的图像。但是,虽然我希望这 9 个JLabels在此网格layout (3,3)中,但我还希望在顶部 (a JLabel) 有一条消息,我可以将其集中起来,比如欢迎消息以及在JButtons下面有大约四个?有人可以为我指出如何实现这一目标的正确方向吗?

谢谢!

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class HomeController extends JPanel implements MouseListener
{
    HomeController()
    {
        setLayout(new GridLayout(3,3));

        JLabel apl1 = new JLabel("");
        apl1.setBackground(Color.WHITE);
        apl1.setOpaque(true);
        this.add(apl1);

        JLabel apl2 = new JLabel("");
        apl2.setBackground(Color.BLACK);
        apl2.setOpaque(true);
        this.add(apl2);

        JLabel apl3 = new JLabel("");
        apl3.setBackground(Color.WHITE);
        apl3.setOpaque(true);
        this.add(apl3);

        JLabel apl4 = new JLabel("");
        apl4.setBackground(Color.BLACK);
        apl4.setOpaque(true);
        this.add(apl4);

        JLabel apl5 = new JLabel("");
        apl5.setBackground(Color.WHITE);
        apl5.setOpaque(true);
        this.add(apl5);

        JLabel apl6 = new JLabel("");
        apl6.setBackground(Color.BLACK);
        apl6.setOpaque(true);
        this.add(apl6);

        JLabel apl7 = new JLabel("");
        apl7.setBackground(Color.WHITE);
        apl7.setOpaque(true);
        this.add(apl7);

        JLabel apl8 = new JLabel("");
        apl8.setBackground(Color.BLACK);
        apl8.setOpaque(true);
        this.add(apl8);

        JLabel apl9 = new JLabel("");
        apl9.setBackground(Color.WHITE);
        apl9.setOpaque(true);
        this.add(apl9);

        JLabel message = new JLabel("hello world");
        this.add(message);
    }
}
4

1 回答 1

1

您可以组合具有不同布局的多个面板。有关详细信息,请查看A Visual Guide to Layout Managers

例如,默认布局JFrameBorderLayout. 使用BorderLayout,您可以将标题放置在BorderLayout.NORTH,将带有按钮的面板放置在 ,将BorderLayout.SOUTH带有标签网格的面板放置在BorderLayout.CENTER。每个面板可能有自己更复杂的布局。例如,标签网格使用GridLayout,按钮面板使用FlowLayout

这是一个基于已发布代码的非常简单的示例,它演示了这种方法:

在此处输入图像描述

import java.awt.*;
import javax.swing.*;

public class TestGrid {
    public TestGrid() {
        final JFrame frame = new JFrame("Grid");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel mainPanel = new JPanel(new GridLayout(3, 3));

        for (int idx = 0; idx < 9; idx++) {
            JLabel label = new JLabel();
            label.setBackground(idx % 2 == 0 ? Color.WHITE : Color.BLACK);
            label.setOpaque(true);
            mainPanel.add(label);
        }
        mainPanel.setPreferredSize(new Dimension(200, 200));
        frame.add(mainPanel, BorderLayout.CENTER);

        frame.add(new JLabel("Title", JLabel.CENTER), BorderLayout.NORTH);

        JPanel buttonsPanel = new JPanel();
        buttonsPanel.add(new JButton("Start"));
        buttonsPanel.add(new JButton("Stop"));
        frame.add(buttonsPanel, BorderLayout.SOUTH);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        try {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestGrid();
            }
        });
    }
}   
于 2013-04-05T00:18:39.440 回答