【问题标题】:add borders around each element in a JPanel在 JPanel 中的每个元素周围添加边框
【发布时间】:2018-05-03 05:46:54
【问题描述】:

我有一个 JPanel,我正在向网格内部添加 25 个 JPanel。我想要每个面板周围的边框,以便您可以清楚地区分每个元素。填充也可以。如果我尝试添加边框,我将面板添加到面板的方式会将其应用于包含元素的较大面板。

public class LightsOutView

{ GridLayout ExperimentLayout = new GridLayout(5, 5);

// Creates layout of the GUI
public LightsOutView ()
{
    JFrame frame = new JFrame();
    frame.setTitle("Lights Out");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    frame.setContentPane(makeContents());
    frame.setVisible(true);
}

/**
 * Creates the blank game board. Returns the panel
 * 
 * @return JPanel
 */
public JPanel makeContents ()
{
    // Create a panel to hold the 5x5 grid
    JPanel board = new JPanel(new GridLayout(5, 5));
    board.setLayout(experimentLayout);

    // Add the components to the panel
    for (int i = 0; i < 25; i++)
    {
        board.add(new JPanel()).setBackground(Color.YELLOW);
    }

    // Return the panel
    return board;
}

}

如何在每个元素周围添加边框。我是否需要更改将面板添加到网格的方式?

【问题讨论】:

    标签: java swing jpanel


    【解决方案1】:

    一种方式:

    将您的 GridLayout 更改为:

    GridLayout experimentLayout = new GridLayout(5, 5, gap, gap);
    

    gap 是一些小的 int 值,比如 1 到 3(对于像素)。然后给背景容器一个背景颜色,它会通过间隙显示出来。您还需要给背景 JPanel 一个具有相同间隙宽度的线条边框。

    例如:

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import javax.swing.*;
    
    @SuppressWarnings("serial")
    public class GridWithBorders extends JPanel {
        private static final int SIDES = 6;
        private static final int SIDE_LENGTH = 60;
        private static final int GAP = 3;
        private static final Color BG = Color.BLACK;
        private static final Color CELL_COLOR = Color.GREEN.darker();
    
        public GridWithBorders() {
            setBackground(BG);
            setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
            setLayout(new GridLayout(SIDES, SIDES, GAP, GAP));
            Dimension prefSize = new Dimension(SIDE_LENGTH, SIDE_LENGTH);
            for (int i = 0; i < SIDES; i++) {
                for (int j = 0; j < SIDES; j++) {
                    JPanel cell = new JPanel();
                    cell.setBackground(CELL_COLOR);
                    cell.setPreferredSize(prefSize);
                    add(cell);
                }
            }
        }
    
        private static void createAndShowGui() {
            GridWithBorders mainPanel = new GridWithBorders();
    
            JFrame frame = new JFrame("GridWithBorders");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(mainPanel);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(() -> createAndShowGui());
        }
    }
    

    【讨论】:

    • 效果很好!我想我不认识 GridLayout 文档的那一部分。
    • @ZacharyKing:见上面的例子
    猜你喜欢
    • 2016-04-18
    • 1970-01-01
    • 2017-03-26
    • 2019-08-02
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多