2017-03-07 6 views
0

JPanel을 매개 변수와 함께 CardLayout으로 만들고 싶습니다. 나는 다음과 같은 코드가 있습니다Java 생성자 매개 변수가있는 JFrame에서 cardLayout을 생성하십시오.

public class MainFrame extends JFrame{ 

private JPanel contentPane; 
private CardLayout cardLayout; 
private String card; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       MainFrame frame = new MainFrame(""); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public MainFrame(String card) { 
    initComponents(); 
    cardLayout = new CardLayout(); 

    if(card.equals("ADMIN")){ 
     contentPane.revalidate(); 
     cardLayout.show(this.contentPane, "ADMIN"); 
    }else if(card.equals("USER")){ 
     contentPane.revalidate(); 
     cardLayout.show(this.contentPane, "USER"); 
    } 
} 

private void initComponents() { 
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
    this.setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(1280, 800); 
    this.contentPane = new JPanel(); 
    this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    this.contentPane.setLayout(cardLayout); 
    this.contentPane.add(new PanelOne(), "ADMIN"); 
    this.contentPane.add(new PanelTwo(), "USER"); 
    setContentPane(this.contentPane); 
} 

을하지만 난이 코드를 실행하면 내가 예외가 얻을 :

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: 
    wrong parent for CardLayout 

내가 무엇을해야합니까이 문제를 해결하기를?

이미 기본 방법에서 매개 변수를 변경하려고했지만 해결책이 없습니다.

답변

4

사용중인 CardLayout 객체에 문제가 있습니다. 당신이 구성 요소 show에 사용하고이 CardLayout 객체 :

this.contentPane.setLayout(cardLayout); 

사실, 그것은 나타납니다

public MainFrame(String card) { 
    initComponents(); 
    cardLayout = new CardLayout(); 

현재 여기의 contentPane의 레이아웃이다 것과 동일하지 않습니다 이 후자의 cardLayout 변수는 실제로 사용될 때 null입니다.

해결책이로 변경

공용 클래스 메인 프레임 JFrame의 {

private JPanel contentPane; 
private CardLayout cardLayout = new CardLayout(); 

를 확장하고 다른 곳 new CardLayout();를 호출하지 않습니다.


또 다른 문제점은 생성자를 호출 할 때 빈 문자열을 전달한다는 것입니다. 예를 들어,

,

import java.awt.CardLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Toolkit; 

import javax.swing.*; 
import javax.swing.border.EmptyBorder; 

public class MainFrame extends JFrame { 

    private JPanel contentPane; 
    private CardLayout cardLayout = new CardLayout(); 
    private String card; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        MainFrame frame = new MainFrame(PanelOne.NAME); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public MainFrame(String card) { 
     initComponents(); 
     // cardLayout = new CardLayout();   
     cardLayout.show(getContentPane(), card); 
    } 

    private void initComponents() { 
     Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
     this.setLocation(dim.width/2 - this.getSize().width/2, 
       dim.height/2 - this.getSize().height/2); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(1280, 800); 
     this.contentPane = new JPanel(); 
     this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     this.contentPane.setLayout(cardLayout); 
     this.contentPane.add(new PanelOne(), PanelOne.NAME); 
     this.contentPane.add(new PanelTwo(), PanelTwo.NAME); 
     setContentPane(this.contentPane); 
    } 
} 

public class PanelTwo extends JPanel { 
    public static final String NAME = "User"; 

    public PanelTwo() { 
     setBorder(BorderFactory.createTitledBorder(NAME)); 
    } 

} 
+0

public class PanelOne extends JPanel { public static final String NAME = "Administrator"; public PanelOne() { setBorder(BorderFactory.createTitledBorder(NAME)); } } 
당신을 감사합니다, 당신은 구원을 내 일 – leonkuehn

관련 문제