2017-11-20 13 views
1

私はJPanelを持っており、グリッドの内側に25個のJPanelを追加しています。私は各パネルの周りに境界線が必要なので、各要素を明確に区別することができます。パディングも同様に機能します。私がボーダーを追加しようとすると、ボードをパネルに追加する方法は、それを代わりに要素を含む大きなパネルに適用します。JPanelの各要素の周りに罫線を追加

public class LightsOutView 

{ のGridLayout experimentLayout =新しいグリッドレイアウト(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; 
} 

}

どのように私は、各要素の周囲に境界線を追加します。パネルをグリッドに追加する方法を変更する必要がありますか?

答えて

3

一つの方法:

の変更のようなものにあなたのGridLayoutの:

ギャップがいくつかの小さなint型の値がある
GridLayout experimentLayout = new GridLayout(5, 5, gap, gap); 

は、1〜3(ピクセルのために)と言います。その後、バックグラウンドコンテナに背景色を与え、それはギャップを介して表示されます。背景JPanelに同じ隙間幅を持つ線の境界線を与えることもできます。例えば

:完璧に働い

enter image description here

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

!私はGridLayoutのドキュメントのその部分を認識していなかったと思います。 –

+0

@ ZacharyKing:上記の例を参照 –

関連する問題