2016-09-01 13 views
2

ボタンのグリッドを含むJPanelを含むJFrameを作成しています。すべて正常に動作しますが、ボタンのパネルの上にJLabelを追加したいのですが、ラベルは表示されません。しかし、BoxLayoutを使用しないと表示されます。どんな助けもありがとうございます。BoxLayoutを使用しているJFrameにJLabelを追加する

下の最初のコード部分は、私のJFrameクラスは以下のコードは私のJPanelクラスは以下の最後のコード部分は

public class RunGame { 

    public static void main(String[] args) { 
     new Frame(); 
    } 
} 
メインクラスであるボタン

import java.awt.Dimension; 
import java.awt.GridLayout; 
import javax.swing.JButton; 
import javax.swing.JPanel; 

public class Panel extends JPanel { 
    private static final long serialVersionUID = 2L; 

    private int i; 

    JButton[] button = new JButton[9]; 
    GridLayout layout = new GridLayout(3, 3); 
    Dimension dim = new Dimension(500, 500); 

    public Panel() { 

     for (i = 0; i<9; i++) { 
      button[i] = new JButton(); 
      add(button[i]); 
     } 
     setPreferredSize(dim); 
     setMinimumSize(dim); 
     setMaximumSize(dim); 
     setLayout(layout); 
    } 
} 

である

import java.awt.Dimension; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Frame extends JFrame { 
    private static final long serialVersionUID = 1L; 

    Panel panel = new Panel(); 
    Dimension frameDim = new Dimension(1000, 1000); 
    Dimension labelDim = new Dimension(100, 20); 
    Box box = new Box(BoxLayout.Y_AXIS); 
    JLabel label = new JLabel("Tic Tac Toe"); 
    JPanel pane = new JPanel(); 

    public Frame() { 

     pane.add(label); 
     pane.setPreferredSize(labelDim); 
     pane.setMinimumSize(labelDim); 
     add(pane); 
     box.add(Box.createVerticalGlue()); 
     box.add(panel);  
     box.add(Box.createVerticalGlue()); 
     add(box); 
     setTitle("Tic Tac Toe"); 
     setSize(frameDim); 
     setMinimumSize(frameDim); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 
} 

です

+0

私はこのウェブサイトともっと多くの答えを探しました。私もいくつかのユーザーとチャットをしましたが、答えは見つかりませんでした。助けてくれてありがとう。 – LAD

+0

テキストフィールド全体を横切って伸ばしたい場合は、おそらく別のパネルに移動する必要があります。おそらく、 "ボックスパネル"と "テキストフィールドパネル"を保持する "メインパネル"を作成します。 「メインパネル」に垂直なFlowLayoutを与えますか? – byxor

+0

'Frame.panel'はどこでも使用されていません(少なくともこの例では)。気にしないでください、それはボックスに追加されています。しかし、なぜ? – byxor

答えて

0

フレームにラベルをペインに追加してそのボックスのものを削除するときは、BorderLayoutを使用できます

public Frame() 
    { 
    //create label and add it to the frame 
    JLabel label = new JLabel("Tic Tac Toe"); 
    label.setHorizontalAlignment(JLabel.CENTER); 
    add(label, BorderLayout.NORTH); 

    //create buttonsPanel and add it to the frame 
    JPanel buttons = new JPanel(); 
    buttons.setLayout(new GridLayout(3, 3)); 
    for (int i = 0; i < 9; i++) 
    { 
     buttons.add(new JButton(""+i)); 
    } 
    add(buttons, BorderLayout.CENTER); 

    //setup the title, other properties for the frame etc.. 
    setTitle("Tic Tac Toe"); 
    setSize(1000, 1000); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    setVisible(true); 
    } 

希望以下のようにこれは、より良いことができます:)これは、ラベルはJFrameに直接追加され

+0

それはうまくいくはずですが、私が試してみると、ラベルとグリッドが上下ではなく横に表示されます。 – LAD

+0

私は上記のコードを編集して、完全に動作する例を示しましたが、もちろん、どんなクラスにも入れて、デザインしたいと思うように拡張する必要があります。 – Techno1212

+0

それは私が探しているものに近いです。唯一の違いは、ボタングリッドを小さくして、その側面にスペースを確保します。しかし、ポストに感謝! – LAD

3
add(box); 

のコンテンツペインはBorderLayoutを使用してレイアウトされています。境界線レイアウトにコンポーネントを追加するときのデフォルトは、CENTERです。これは単一のコンポーネントしか表示できません。それを修正するには:

pane.add(box); 
+0

Andrewに答えを書く時間を費やしてくれてありがとう。 – LAD

関連する問題