2016-11-04 23 views
1

私は最初のレイアウトマネージャをswingで使ってみるためのnewbですが、JPanelを表示できず、ウィンドウが最小化されていません。JavaDocに相談しましたが、間違っていることを理解できません。私はちょうど正しい方向にポインタが欲しいです。私はmysqlデータベースにも接続していますが、それは別の時間です。何かアドバイスをいただければ幸いです:)ここJPanelが表示されないのはなぜですか?

は私のコード

package learn; 

import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.JOptionPane; 
import javax.swing.JFrame; 
import java.sql.*; 
import javax.swing.JPanel; 
import java.awt.BorderLayout; 


public class TestGUI3 extends JFrame implements ActionListener 
{ 
    JRadioButton rb1, rb2, rb3; 
    JFrame f; 
    JButton b; 
    JPanel myFirstPanel; 
    public TestGUI3() 
    { 
     f = new JFrame("Welcome to Ballon d'or , created by Darren Estcourt"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     myFirstPanel = new JPanel(); 
     f.add(myFirstPanel); 
     rb1 = new JRadioButton("Start New Game"); 
     rb2 = new JRadioButton("Load Game"); 
     rb3 = new JRadioButton("Quit"); 

     myFirstPanel.add(rb1); 
     myFirstPanel.add(rb2); 
     myFirstPanel.add(rb3); 

     ButtonGroup bg=new ButtonGroup(); 
     bg.add(rb1); 
     bg.add(rb2); 
     bg.add(rb3); 

     b = new JButton("OK"); 
     myFirstPanel.add(b); 

     b.addActionListener(this); 





     f.setLayout(new BorderLayout()); 
     f.pack(); 
     f.setVisible(true); 
    } 
      @Override public void actionPerformed(ActionEvent e) 
      { 
       if(rb1.isSelected()) 
       { 
        f.dispose(); 


        ManagerName test = new ManagerName(); 
        test.getFrame().setVisible(true); 

       } 
       if(rb2.isSelected()) 
       { 
        JOptionPane.showMessageDialog(f,"Load Game"); 
       } 
       if(rb3.isSelected()) 
       { 
        System.exit(0); 
       } 

      } 

      public static void main(String[] args) 
      { 
       try 
       { 
        String myDriver = "org.gjt.mm.mysql.Driver"; 
        String myUrl = "jdbc:mysql://localhost:3306/ballondor?autoReconnect=true&useSSL=false"; 
        Class.forName(myDriver); 
        Connection conn = DriverManager.getConnection(myUrl, "root", "Lucia290907"); 

        String query = "SELECT * FROM clubInfo"; 

        Statement st = conn.createStatement(); 

        ResultSet rs = st.executeQuery(query); 

        while (rs.next()) 
         { 
          int TeamID = rs.getInt("TeamID"); 
          String TeamName = rs.getString("TeamName"); 
          // print the results 
          System.out.format("%s, \n", TeamName); 
         } // end while loop 

            st.close(); 
       } // end try 
    catch (Exception e) 
    { 
     System.err.println("Got an exception! "); 
     System.err.println(e.getMessage()); 
    } 

       SwingUtilities.invokeLater(new Runnable() 
       { 
        public void run() 
        { 
        TestGUI3 test = new TestGUI3(); 
        test.setVisible(true); 

        } 
       }); 
      } 



} 
+3

あなたのクラスがJFrameを拡張して1つを初期化する理由はありますか体の中に? – paul

+0

JFrameをインスタンス化する主な方法はどこですか?それでは、私たちがあなたを助けるために時間を費やしてほしいので、**あなたのソースコードのインデント/書式を正しく設定するのには数分を要します。ありがとう! – GhostCat

+0

最初はJFrameのインスタンスがあり、それをコンストラクタで初期化しました。しかし、私はEDTの使い方を読んでいました。なぜなら、私はSetVisible()メソッドの "シンボルを見つけることができませんでした"ので、私は単にEDTでコンストラクタを呼び出すことができません。ですから、この問題を解決するために、私はJFrameクラスを拡張しました。うまくいけば.....プログラムはEDT上で動作しています。 –

答えて

2

順序が重要ですが、私は今テストすることはできませんが、BorderLayoutは、コンポーネントのデフォルトのレイアウトマネージャではありませんので、の必要性このライン:

f.setLayout(new BorderLayout()); 

私はあなたが上の行を削除すると、あなたのJPanelにあなたが追加しているすべてが新しい要素によって「上書き」されますので、それはJButtonのが表示されるだけになりますことを賭けは、(理由BorderLayoutの)追加しました、 私あなたがそれを垂直に整列させたいなら、BoxLayoutまたはGridLayoutを1列と0行(試行錯誤ではなく、0行はN行を意味する)で試してみてください。リンクを今は投稿できません。私の電話で私の賭けです。

また、あなたはどちらか一方を使用して、あなたのコードにJFrameを拡張し、そのインスタンスを作成しているあなたは、あなたのクラスを意味するJFrameを拡張する場合は、あなたが必要な場合は、JFrameされているので、それはインスタンスを使用することをお勧めします何かを拡張するのが良いですJPanel

しかし、適切なMCVEをすぐに投稿する、つまりGUIコードだけを投稿すると、DB接続や実行されるアクションは必要ありません。あなたのコンポーネントはJPanel内にある

関連する問題