2011-12-25 2 views
1

に手動でカスタムコンポーネントを追加する:私は、グリッドを作成し、このクラスを有するスインググループレイアウト

class GridPane extends JPanel{ 

    public GridPane(int row,int col){ 

     setLayout(new GridLayout(row,col)); 

     setBorder(BorderFactory.createEmptyBorder(1,1,1,1)); 

     for (int i =1; i<=(row*col); i++) 
     { 
     JPanel pan = new JPanel(); 
     pan.setBackground(Color.RED); 
     pan.setPreferredSize(new Dimension(3,3)); 
     pan.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
     add(pan); 
     } 
} 

とグループレイアウトを持つ空のメインフレームを設定している本:

public MainFrame() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    GroupLayout gl_contentPane = new GroupLayout(contentPane); 
    gl_contentPane.setHorizontalGroup(
     gl_contentPane.createParallelGroup(Alignment.LEADING) 
      .addGap(0, 440, Short.MAX_VALUE) 
    ); 
    gl_contentPane.setVerticalGroup(
     gl_contentPane.createParallelGroup(Alignment.LEADING) 
      .addGap(0, 268, Short.MAX_VALUE) 
    ); 
    contentPane.setLayout(gl_contentPane); 
} 

IはSWINGの経験はあまりありません。しばらくの間、メインフレームの右にGridPaneオブジェクトを追加しようとしています。

java.lang.IllegalStateException:GridPane [、0,0,0x0、無効、レイアウト= java.awt.GridLayout、alignmentX = 0.0、alignmentY = 0.0、ボーダー=のjavaxそれは私のような何かを語って保持します。 swing.border.EmptyBorderする@ 6ba7508a、フラグが9、MAXIMUMSIZE =、のminimumSize =、preferredSizeが=]水平/垂直のグループに接続されていない=

誰もが何が起こっているか知っていますか?私は必要なものを達成するために何をすべきですか?申し訳ありませんが、たくさんのコードを投稿しています。助けてくれてありがとう。

答えて

2

この場合、BorderLayoutを使用することをお勧めします。

contentPane = new JPanel(); 
contentPane.setLayout(new BorderLayout()); 

contentPane.add(pan, BorderLayout.LINE_END); 

ここに完全なコードがあります。私はこれがあなたが探しているものであることを願っています。

public class Main { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setLayout(new BorderLayout()); 
     GridPane gp = new GridPane(5, 5); 

     frame.add(gp, BorderLayout.EAST); 

     frame.setVisible(true); 
     frame.setSize(250, 250); 
    } 
} 

class GridPane extends JPanel { 

    public GridPane(int row, int col) { 

     setLayout(new GridLayout(row, col)); 
     setPreferredSize(new Dimension(125, 125)); 
     setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); 

     for (int i = 1; i <= (row * col); i++) { 
      JPanel pan = new JPanel(); 
      pan.setBackground(Color.RED); 
      pan.setPreferredSize(new Dimension(3, 3)); 
      pan.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
      add(pan); 
     } 
    } 
} 

便利なリンク:あなたの仕事のために多く

+0

感謝。これはまさに私が探していたものでした! – Cemre

+0

それは私の喜びです。 – Katana

関連する問題