2016-04-17 5 views
0

メソッドgetContentPane()を呼び出した後に誰かが私になぜそのことを伝えることができますか?add(grid [i] [j])JLabelの行列を表示できません。 「e」ラベルは1つしか表示されません。同じサイズ、同じ位置とそのすべての新しいラベルが右に配置されたが、上に軽くたたくピシャリ -JLabel行列を表示する

パブリッククラスSudokuFrameはJFrameのは、{

JButton generateButton; 
JLabel[][] grid; 

public SudokuFrame(){ 
    setSize(300, 300); 
    setTitle("Sudoku"); 
    setLayout(null); 
    generateButton = new JButton("Generate"); 
    generateButton.setBounds(90, 220, 100, 30); 
    add(generateButton); 
    generateButton.addActionListener(this); 

    grid = new JLabel[9][9]; 
    for (int i = 0; i < 9; i++) { 
     for (int j = 0; j < 9; j++) { 
      grid[i][j] = new JLabel("e"); 
      grid[i][j].setBounds(100, 100, 30, 30); 
      getContentPane().add(grid[i][j]); 
     } 
    } 
} 

public static void main(String[] args){ 
    SudokuFrame frame = new SudokuFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 

答えて

4

あなたは、すべてのJLabelにまったく同じ境界を与えている ActionListenerを実装して拡張します以前に追加されたものの

解決策:nullレイアウトを使用しないでください。問題がGridLayoutに完全に適している場合は、なぜこれを使用しますか?レイアウトマネージャは、コーディングとGUIの管理を容易にするため、一般にnullのレイアウトとsetBoundsを使用しないようにしたいと考えています。レイアウトがあなたのために重い持ち上げをさせてください。

例えば、

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.GridLayout; 
import javax.swing.*; 

public class SimpleSudoku extends JPanel { 
    private static final int GAP = 1; 
    private static final Font LABEL_FONT = new Font(Font.DIALOG, Font.PLAIN, 24); 
    private JLabel[][] grid = new JLabel[9][9]; 

    public SimpleSudoku() { 
     JPanel sudokuPanel = new JPanel(new GridLayout(9, 9, GAP, GAP)); 
     sudokuPanel.setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP)); 
     sudokuPanel.setBackground(Color.BLACK); 
     for (int row = 0; row < grid.length; row++) { 
      for (int col = 0; col < grid[row].length; col++) { 
       grid[row][col] = new JLabel("  ", SwingConstants.CENTER); 
       grid[row][col].setFont(LABEL_FONT); // make it big 
       grid[row][col].setOpaque(true); 
       grid[row][col].setBackground(Color.WHITE); 
       sudokuPanel.add(grid[row][col]); 
      } 
     } 

     JPanel bottomPanel = new JPanel(); 
     bottomPanel.add(new JButton("Regenerate")); 

     setLayout(new BorderLayout()); 
     add(sudokuPanel, BorderLayout.CENTER); 
     add(bottomPanel, BorderLayout.PAGE_END); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> { 
      createAndShowGui(); 
     }); 
    } 

    private static void createAndShowGui() { 
     SimpleSudoku mainPanel = new SimpleSudoku(); 
     JFrame frame = new JFrame("SimpleSudoku"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 
} 
+1

(1+)上のSwingのチュートリアルからセクションを読む[GridLayoutの使用方法](http://docs.oracle.com/javase/tutorial/uiswing/layout/grid .html)を参照してください。また、イベントディスパッチスレッドでコンポーネントが作成されるように、GUIを作成してコードを構成するより良い方法を示します。チュートリアルへのリンクは、すべてのSwingの基本についての例があるので便利です。 – camickr

+0

レイアウト、レイアウト、レイアウト+1 – MadProgrammer

関連する問題