2011-11-29 154 views
0

因此,我正在使用gui进行研究任务,如果选择“输入”,则在左侧面板“输入”,“处理”和“显示”上有3个框CardLayout那么第一个面板显示在右边,将“屏幕显示”被选中,则显示最后一个面板,但我不能得到“处理”这部分显示:在卡片布局中制作某些面板

public void actionPerformed(ActionEvent event) { 
    // show first card 
    if (event.getSource() == controls[ 0 ])  
     cardManager.first(deck); 

    else if (event.getSource() == controls[ 1 ])  
     cardManager.show(card2Panel(), "c2"); 
    // show previous card 
    else if (event.getSource() == controls[ 2 ]) 
     cardManager.last(deck); 

在它的代码是输入表格:

import java.awt.*; 

import java.awt.event。 ; import javax.swing。;

公共类BookCentre延伸的JFrame实现的ActionListener {

private CardLayout cardManager; 
private JPanel deck; 
private JButton controls[]; 
private String names[] = { "Input", "Processing", "Display"}; 

public BookCentre(){ 
    super("CardLayout"); 
    Container container = getContentPane(); 
    deck = new JPanel(); 
    cardManager = new CardLayout(); 
    deck.setLayout(cardManager); 
    deck.add(card1Panel(), "c1"); 
    deck.add(card2Panel(), "c2"); 
    deck.add(card3Panel(), "c3"); 
    JPanel buttons = new JPanel(); 
    buttons.setLayout(new GridLayout(2, 2)); 
    controls = new JButton[ names.length ]; 
    for (int count = 0; count < controls.length; count++) { 
     controls[ count ] = new JButton(names[ count ]); 
     controls[ count ].addActionListener(this); 
     buttons.add(controls[ count ]); 
     container.add(buttons, BorderLayout.WEST); 
     container.add(deck, BorderLayout.EAST); 
     setSize(450, 200); 
     setVisible(true);} 

}

public JPanel card1Panel(){ 
JLabel label1 = new JLabel("card one", SwingConstants.CENTER); 
JPanel card1 = new JPanel(); 
card1.add(label1); 
return card1; 

}

public JPanel card2Panel(){ 
    JLabel label2 = new JLabel("card two", SwingConstants.CENTER); 
    JPanel card2 = new JPanel(); 
    card2.setBackground(Color.yellow); 
    card2.add(label2); 
    return card2; 

}

public JPanel card3Panel(){ 
    JLabel label3 = new JLabel("card three"); 
    JPanel card3 = new JPanel(); 
    card3.setLayout(new BorderLayout()); 
    card3.add(new JButton("North"), BorderLayout.NORTH); 
    card3.add(new JButton("West"), BorderLayout.WEST); 
    card3.add(new JButton("East"), BorderLayout.EAST); 
    card3.add(new JButton("South"), BorderLayout.SOUTH); 
    card3.add(label3, BorderLayout.CENTER); 
    return card3; 

}

public void actionPerformed(ActionEvent event) { 
    // show first card 
    if (event.getSource() == controls[ 0 ])  
     cardManager.first(deck); 

    else if (event.getSource() == controls[ 1 ])  
     cardManager.show(card2Panel(), "c2"); 
    // show previous card 
    else if (event.getSource() == controls[ 2 ]) 
     cardManager.last(deck);   

}

public static void main(String args[]) { 
    BookCentre cardDeckDemo = new BookCentre(); 
    cardDeckDemo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

}}

在公共无效的actionPerformed我能够使用cardManager.first,接下来,以前的,过去的。我只想要显示“处理”面板,但不是用户首先看,最后一个或者骑自行车穿过所有面板。

回答

2

查看Java Trail的CardLayout。在的ActionListener的cardManager.show()调用应该是

cardManager.show(deck, "c2");

的第一个参数是一个CardLayout父容器,不是说你要显示的组件。

+0

这正是我所需要的,不能相信我错过了这么简单的东西,谢谢! – Clozecall