2011-11-06 3 views
2

여기에는 JFrame이 있으며 여기에는 몇 가지 옵션이 있습니다. 확인 버튼을 누르면 나는 동일한 JFrame 내용을 지우고 새 내용을 추가하길 원합니다. 나는 그것을 시도했지만 문제가 새로운 것입니다 JFrame가 튀어 나옵니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?JFrame의 구성 요소를 지우고 새 구성 요소를 추가하십시오.

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.IOException; 
import java.net.InetAddress; 
import java.net.UnknownHostException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.*; 

public class GuiFrame extends JFrame { 

    final JFrame f = new JFrame("Test"); 

    public void Starter(){ 
     ImageIcon img = new ImageIcon("C:\\Users\\neal\\Desktop\\no.png"); 
     f.setIconImage(img.getImage()); 
     ButtonGroup group = new ButtonGroup(); 
     final JRadioButton Acess = new JRadioButton("Acess"); 
     final JRadioButton Chat = new JRadioButton("Chat"); 
     group.add(Acess); 
     group.add(Chat); 
     f.setSize(400,100); 
     f.setLocationRelativeTo(null); 
     JButton OptionOk = new JButton("OK"); 

Label option = new Label("Choose a Option"); 

     final Container content = f.getContentPane(); 
     content.setBackground(Color.white); 
     content.setLayout(new FlowLayout()); 

     content.add(option); 
     content.add(Acess); 
     content.add(Chat); 
     content.add(OptionOk); 
      f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       OptionOk.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 


       try { 
        new GuiFrame().Initiate(); 
       } catch (UnknownHostException ex) { 
        Logger.getLogger(GuiFrame.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
       }); 
    } 

    public void Initiate() throws UnknownHostException { 

     f.removeAll(); 
     ButtonGroup group = new ButtonGroup(); 

     final JRadioButton ButtonServer = new JRadioButton("Server"); 
     final JRadioButton ButtonClient = new JRadioButton("Client"); 
     group.add(ButtonServer); 
     group.add(ButtonClient); 

     f.setSize(400, 100); 
     f.setLocationRelativeTo(null); 
     InetAddress thisIp = InetAddress.getLocalHost(); 

     ImageIcon img = new ImageIcon("C:\\Users\\neal\\Desktop\\no.png"); 
     f.setIconImage(img.getImage()); 
     Label lip = new Label("Your IP is : " + thisIp.getHostAddress()); 
     Label setup = new Label("Setup as "); 
     JButton ButtonOk = new JButton("OK"); 

     final Container content = f.getContentPane(); 
     content.setBackground(Color.white); 
     content.setLayout(new FlowLayout()); 
     content.add(lip); 
     content.add(setup); 
     content.add(ButtonServer); 
     content.add(ButtonClient); 
     content.add(ButtonOk); 
     f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) throws UnknownHostException { 

     GuiFrame gf = new GuiFrame(); 
     gf.Starter(); 
    } 
} 
+0

일부 자바 코드 규칙이있는 편집 –

+0

예를 참조하십시오 : 첫 소문자 문자와 변수 및 필드 쓰기 클래스 이름을 먼저 대문자로 작성하십시오. Object obj = new Object(); – MartinL

답변

5

해결책은 간단합니다. CardLayout을 사용하여이 레이아웃 관리자가 모든 힘든 일을 처리하도록하십시오. JButton에이 밀려 경우 두 개 더

How to use CardLayout이 코드에 관해서는, 시작할 때 당신이 실제로 2 JFrames를 만드는 점에 유의하시기 바랍니다과 :

은이 작업을 수행하는 방법에 대한 자세한 내용은 자습서를 참조하십시오 GuiFrame 클래스 자체는 JFrame을 확장하지만 결코 사용하지 않아 낭비되는 JFrame 인 것처럼 보이지만 프로그램 시작과 버튼을 누를 때처럼 GuiFrame 인스턴스가 생성 될 때마다 생성됩니다. 그런 다음이 클래스의 내부에서 프로그램 시작과 다시 버튼 누르기에서 다른 JFrame을 만듭니다.이 작업이 원하는 작업이라고 생각하지 않습니다.

그래서 클래스가 JFrame을 확장하지 않도록 코드를 변경하고 버튼의 ActionListener에 클래스의 새 인스턴스를 만들지 마십시오. 대신보기를 바꾸려면 CardLayout을 사용하십시오. 예를 들어

:

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class GuiFrame { 

    private static final String FIRST_PANEL = "First Panel"; 
    private static final String SECOND_PANEL = "Second Panel"; 
    final JFrame f = new JFrame("Test"); 
    private CardLayout cardLayout = new CardLayout(); 
    private JPanel content; 

    public void Starter() { 
     f.setSize(400, 100); 
     f.setLocationRelativeTo(null); 
     JButton OptionOk = new JButton("OK"); 

     Label option = new Label("Choose a Option"); 

     content = (JPanel) f.getContentPane(); 
     content.setLayout(cardLayout); 

     JPanel firstPanel = new JPanel(); 
     firstPanel.setBackground(Color.white); 
     firstPanel.setLayout(new FlowLayout()); 

     firstPanel.add(option); 
     firstPanel.add(OptionOk); 

     content.add(firstPanel, FIRST_PANEL); 
     content.add(createSecondPanel(), SECOND_PANEL); 
     f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     OptionOk.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 

      cardLayout.show(content, SECOND_PANEL); 

     } 
     }); 

    } 

    private JPanel createSecondPanel() { 
     JPanel secondPanel = new JPanel(); 
     secondPanel.add(new JButton(new AbstractAction("Go Back") { 
     public void actionPerformed(ActionEvent e) { 
      cardLayout.show(content, FIRST_PANEL); 
     } 
     })); 
     return secondPanel; 
    } 


    public static void main(String[] args) { 

     GuiFrame gf = new GuiFrame(); 
     gf.Starter(); 
    } 

} 
+0

잘 설명되어 있습니다. +1은 CardLayout입니다. 감사합니다 – nebula

+0

당신은 오신 것을 환영합니다. 행운을 빌어 요! –

0

고정 (하지만 여전히 더러운) 버전 :

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.net.InetAddress; 
import java.net.UnknownHostException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.*; 

public class GuiFrame implements ActionListener{ 

    final JFrame f = new JFrame("Test"); 

    public void start(){ 
     ImageIcon img = new ImageIcon("C:\\Users\\neal\\Desktop\\no.png"); 
     f.setIconImage(img.getImage()); 
     ButtonGroup group = new ButtonGroup(); 
     final JRadioButton Acess = new JRadioButton("Acess"); 
     final JRadioButton Chat = new JRadioButton("Chat"); 
     group.add(Acess); 
     group.add(Chat); 
     f.setSize(400,100); 
     f.setLocationRelativeTo(null); 
     JButton OptionOk = new JButton("OK"); 

     Label option = new Label("Choose a Option"); 

     final Container content = f.getContentPane(); 
     content.setBackground(Color.white); 
     content.setLayout(new FlowLayout()); 

     content.add(option); 
     content.add(Acess); 
     content.add(Chat); 
     content.add(OptionOk); 
     f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     OptionOk.addActionListener(this); 

    } 

    public void initiate() throws UnknownHostException { 

     //f.removeAll(); 
     ButtonGroup group = new ButtonGroup(); 

     final JRadioButton ButtonServer = new JRadioButton("Server"); 
     final JRadioButton ButtonClient = new JRadioButton("Client"); 
     group.add(ButtonServer); 
     group.add(ButtonClient); 

     f.setSize(400, 100); 
     f.setLocationRelativeTo(null); 
     InetAddress thisIp = InetAddress.getLocalHost(); 

     ImageIcon img = new ImageIcon("C:\\Users\\neal\\Desktop\\no.png"); 
     f.setIconImage(img.getImage()); 
     Label lip = new Label("Your IP is : " + thisIp.getHostAddress()); 
     Label setup = new Label("Setup as "); 
     JButton ButtonOk = new JButton("OK"); 



     final Container content = f.getContentPane(); 
     content.removeAll(); 
     content.setBackground(Color.white); 
     content.setLayout(new FlowLayout()); 
     content.add(lip); 
     content.add(setup); 
     content.add(ButtonServer); 
     content.add(ButtonClient); 
     content.add(ButtonOk); 
     f.repaint(); 

    } 

    public void actionPerformed(ActionEvent arg0) { 
     try { 
      initiate(); 
     } catch (UnknownHostException ex) { 
      Logger.getLogger(GuiFrame.class.getName()).log(Level.SEVERE, null, ex); 
     }  
    } 

    public static void main(String[] args) throws UnknownHostException { 

     GuiFrame gf = new GuiFrame(); 
     gf.start(); 
    } 
} 
+0

Opps !! 작동하지 않았다! – nebula