2017-03-17 9 views
0

私はなぜプログラムをコンパイルするときにpanel.add(txtnum1)panel.add(button2)が表示されないのか分かりません。 panel.add(button)は問題なく動作しますが、私のコンパイラは警告もエラーもスローされません。JPanelはボタンとテキストフィールドを追加しません

package gui; 

import javax.swing.*; 
import java.awt.*; 

public class GUI { 
public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    frame.setVisible(true); 
    frame.setSize(new Dimension(300, 500)); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel panel = new JPanel(); 
    panel.setBackground(Color.GRAY); 
    frame.getContentPane().add(panel); 
    JButton button = new JButton("Submit"); 
    panel.add(button); 

    JTextField txtnum1 = new JTextField(); 
    txtnum1.setPreferredSize(new Dimension(30, 50)); 
    panel.add(txtnum1); 

    JButton button2 = new JButton("Clear"); 
    panel.add(button2); 
} 

} 
+0

おそらく他のコンポーネントが表示されていないパネルに追加されます。絶対位置とサイズを設定するのではなく、レイアウトマネージャを使用してコンポーネントの表示方法を制御する必要があります。 – Titus

+0

'JTextField txtnum1 = new JTextField();txtnum1.setPreferredSize(new Dimension(30、50)); 'テキストフィールドのサイズは、文字列の幅に' setColumns(int) 'を使用し、高さを変更するには 'setFont(bigOrSmallFont)'を使用して設定する必要があります)。 –

+0

* "私のコンパイラは何の警告もエラーもスローしませんでしたが、何かが恋しいですか?" *コンパイラは、実行時に間違っているかもしれない多くのものを拾いません。 OKをコンパイルすると、コードにバグはありません。 –

答えて

1

スイングでGUIアプリケーションを実装する場合、私は(私たちはそのようなJPanelコンテナとか内部JPanelコンテナを持っていないシンプルなGUIを想定)JFrameを構築するコードでは、このアプローチを持っているように:

  1. JFrameを作成し、そのパネルのためのGUIコンポーネントを作成しますJPanel
  2. を作成し、それらを追加
  3. それを初期化
  4. が作るJFrame
  5. 内のすべてのJPanelため2からリピート)JFrameにパネルを追加JFrame画面に表示

ので、このようになりますあなたのコード:

package gui; 

import javax.swing.*; 
import java.awt.*; 

public class GUI { 
public static void main(String[] args) { 
    /* step 1 */ 
    JFrame frame = new JFrame(); 
    frame.setSize(new Dimension(300, 500)); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    /* step 2 */ 
    JPanel panel = new JPanel(); 
    panel.setBackground(Color.GRAY); 

    /* step 3 */ 
    JButton button = new JButton("Submit"); 
    panel.add(button); 

    JTextField txtnum1 = new JTextField(); 
    txtnum1.setPreferredSize(new Dimension(30, 50)); 
    panel.add(txtnum1); 

    JButton button2 = new JButton("Clear"); 
    panel.add(button2); 

    /* step 4 */ 
    frame.getContentPane().add(panel); 
    /* step 5 */ 
    frame.setVisible(true); 
} 

} 

Eclipseで動作確認済みです。

0

すべてのコンポーネントが追加されたら、最後にsetVisible(true)を呼び出す必要があります。

最後にframe.setVisible(true);を入れて、期待どおりに動作します。

関連する問題