2016-04-10 8 views
-1

私のコードでは、メインメニューを開くJFrameがあります。そのメニューでオプションをクリックするとオプションメニューが表示されます。そのオプションメニューでは、画面の左上隅のどこかに自分自身を配置する戻るボタンを作成します。プログラムを実行してオプションメニューに移動すると、JButtonは表示されません。私のコードで何かが間違っているはずです。どんな助け?以下は、私が最初にJButtonを宣言するところです。JButtonの位置付けは表示されません

static JButton optionsBackButton = new JButton("<html><font size = 5 
      color = green>Back</font></html>"); 

ここでは、JButtonと関係があるコードの他の部分があります。

//Options Menu 
    JPanel optionsPanel = new JPanel(); 
    JLabel optionsOptionsTitle = new JLabel("<html><font size = 7 color = blue>Options</font></html>"); 
    JPanel optionsOptionsTitlePanel = new JPanel(); 
    JPanel optionsBackButtonPanel = new JPanel(); 

    optionsPanel.setLayout(null); 
    optionsBackButton.setBounds(100,100,50,50); 

    optionsBackButtonPanel.add(optionsBackButton); 
    optionsOptionsTitlePanel.add(optionsOptionsTitle); 
    optionsPanel.add(optionsOptionsTitlePanel); 
    optionsPanel.add(optionsBackButtonPanel); 

    optionsBackButton.addActionListener(this); 

    //Add panels to the card 
    panel.add("Home Screen", homePanel); 
    panel.add("Options Menu", optionsPanel); 
    //card.add("Game screen", gamePanel); 
    cardLayout.show(panel, "HomeScreen"); 
    contentPane.add(panel); 
+0

JDialogの可能性が高い使用しなければならない静的フィールド、JFrameの使用、および 'null'なのでレイアウトと' setBoundsの最も重要なのは、使用の使用を超えます(...) 'あなたが有効なレイアウトマネージャを使用するべき場所。しかし、より完全なヘルプを得るには、最高の[mcve]を投稿して、これを改善するのを手伝ってください。 –

答えて

2

あなたの問題はnullレイアウトのご使用に起因しています。注:

JPanel optionsBackButtonPanel = new JPanel(); // holds the back button 
               // but never given a size 

optionsPanel.setLayout(null); // uh oh,.... bad news 
optionsBackButton.setBounds(100,100,50,50); // yes you set the bounds of the button 

optionsBackButtonPanel.add(optionsBackButton); 
optionsOptionsTitlePanel.add(optionsOptionsTitle); 
optionsPanel.add(optionsOptionsTitlePanel); 
optionsPanel.add(optionsBackButtonPanel); // again, optionsBackButtonPanel 
           // has been never given a size or location/bounds 

optionsBackButton.addActionListener(this); 

ですから、ボタンの境界を設定し、デフォルトFlowLayoutを使用してのJPanelにそれを追加し、その境界が無意味です。次に、決して設定しない範囲のJPanelをnullレイアウトを使用するJPanelに追加します。 optionsBackButtonPanelは決して表示されません。

解決策:ヌルレイアウトを使用せず、代わりにレイアウトマネージャを学習して使用してください。

ヌルレイアウトでsetBounds()が複雑なGUIを作成する最も簡単で最良の方法のように思えるかもしれませんが、より多くのSwing GUIを使用すると、それらを使用するときに遭遇するより深刻な問題が生じます。 GUIのサイズが変更されたときにコンポーネントのサイズを変更することはありません。これらのコンポーネントは、拡張または維持するロイヤルウィジェットであり、スクロールペインに配置すると完全に失敗し、元のプラットフォームとは異なるすべてのプラットフォームまたは画面解像度で表示されます。ここ

スタート:あなたは含めて、修正するために多くをしましたLaying Out Components in a Container Tutorial

関連する問題