2016-11-04 4 views
1

저는 스윙에서 첫 레이아웃 매니저를 사용하려고하는 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을 확장하고 초기화하는 이유가 있습니까? 그 몸에? – paul

+0

JFrame을 인스턴스화하는 주요 방법은 어디입니까? 그런 다음 : 우리가 당신을 도울 시간을 보내길 원한다. 그래서 ** 당신의 소스 코드를 들여 쓰거나 포맷하는 데 몇 분 정도 시간을 할애 해주십시오. - 감사합니다! – GhostCat

+0

처음에는 JFrame의 인스턴스를 가지고 생성자에서 초기화했습니다. 그러나 나는 EDT를 사용하는 것에 대해 읽었으며 어떤 이유로 든 EDV를 통해 내 생성자를 호출 할 수 없다. 왜냐하면 SetVisible() 메서드에 "심볼을 찾을 수 없다"가 있었기 때문이다. 그래서이 문제를 해결하기 위해 JFrame 클래스를 확장했습니다. 프로그램이 EDT에서 실행되고 있습니다. –

답변

2

순서 문제 없지만 BorderLayout은 구성 요소의 기본 레이아웃 매니저, 그래서 이 라인 : 당신이 위의 줄을 제거 할 때이 JButton를 표시하고 당신이 당신의 JPanel에 추가하는 경우에만 모든 것을 때문에 것은 추가 된 새로운 요소에 의해 "오버라이드 (override) '도착 할 것입니다 내기

f.setLayout(new BorderLayout()); 

(때문에 BorderLayout) , 나는 당신이 그것을 수직으로 정렬하고자한다면 BoxLayout 또는 GridLayout을 1 열과 0 행 (오타가 아닌 0 행은 N 행을 의미)으로 시도 할 수 있습니다. 링크를 지금 게시 할 수는 없지만 코드에서 읽습니다. 내 전화로 내 내기 야. 또한

하나 또는 다른, 당신이 당신이 필요로하는 경우 클래스 JFrame입니다 의미 JFrame을 연장하는 경우 때문에 인스턴스를 사용하는 것이 좋습니다 사용, 코드에 JFrame를 확장하고 그것의 인스턴스를 만들 어떤 것을 확장하는 것이 더 낫습니다. JPanel

더 나은 도움을 받으려면 곧바로 적절한 MCVE를 게시하십시오. 즉, GUI 코드 만 게시하면 DB 연결이나 수행 된 작업이 필요하지 않습니다. 배치 할 코드 만 필요합니다. JPanel 내부 구성 요소

관련 문제