2016-11-04 3 views
1

Ich bin ein Newb, der versucht, meinen ersten Layoutmanager in Schwung zu bringen und kann mein JPanel nicht zur Anzeige bringen und das Fenster wird minimiert. Ich habe den JavaDoc konsultiert, aber ich kann nicht herausfinden, was ich falsch mache. Ich möchte nur einen Zeiger in die richtige Richtung. Ich verbinde mich auch mit meiner MySQL-Datenbank, aber das ist für ein anderes Mal. Jede Beratung wäre sehr geschätzt :)Warum wird mein JPanel nicht angezeigt?

Hier ist mein Code

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

Gibt es einen Grund, dass Ihre Klasse ein JFrame erweitert sowie eines initialisiert in seinem Körper? – paul

+0

Wo ist Ihre Hauptmethode, die diesen JFrame instanziiert? Dann: Sie möchten, dass wir unsere Zeit nutzen, um Ihnen zu helfen, also verbringen Sie bitte die paar Minuten, die es braucht, um Ihren Quellcode richtig einzurücken/zu formatieren - danke! – GhostCat

+0

Anfangs hatte ich nur eine Instanz von JFrame und initialisierte es in meinem Konstruktor. Ich lese jedoch über die Verwendung des EDT und aus irgendeinem Grund kann ich nicht einfach meinen Konstruktor über den EDT aufrufen, weil ich ein "Can not find" -Symbol für die SetVisible() -Methode hatte. Also, um dies zu beheben, habe ich die JFrame-Klasse erweitert und hoffentlich ... das Programm läuft auf dem EDT. –

Antwort

2

Die Auftragsangelegenheiten, ich kann jetzt nicht testen, aber BorderLayout ist der Standard-Layout-Manager auf einer Komponente, so, nicht nötig diese Zeile:

f.setLayout(new BorderLayout()); 

ich wette, dass, wenn Sie die obige Zeile entfernen wird es ein JButton erscheinen und nur machen, weil alles, was Sie zu Ihrem JPanel sind Zugabe bekommt „überschrieben“ durch das neue Element hinzugefügt (wegen BorderLayout) , ich Wenn Sie wollen, dass es vertikal ausgerichtet ist, dann können Sie versuchen BoxLayout oder GridLayout mit 1 Spalte und 0 Zeilen (kein Tippfehler, 0 Zeilen bedeutet N Zeilen) Ich kann nicht die Links jetzt posten, aber aus dem Code, den ich gelesen habe auf meinem Handy ist das meine Wette.

Auch sind erstrecken Sie JFrame auf Ihren Code und eine Instanz davon erstellen, verwenden Sie eine oder das andere, es besser ist, die Instanz zu verwenden, denn wenn man JFrame erweitern, die bedeutet, dass Ihre Klasse IS ein JFrame, wenn Sie brauchen um etwas zu erweitern, ist es besser zu erweitern JPanel

Aber für bessere Hilfe eher eine ordnungsgemäße MCVE, dh post nur die GUI-Code, wir brauchen nicht die DB-Verbindung oder die Aktion durchgeführt, nur der Code, wo Sie platzieren Ihre Komponenten in Ihrem JPanel

Verwandte Themen