2011-06-21 45 views
6

在对话框中,如果选中某个组合并需要显示另一组控件,则需要显示一组控件。 也就是说我需要2层,当组合选中/取消选中时,我需要在它们之间切换。我怎样才能做到这一点?如何根据组合框选择更改UI

感谢

+0

什么平台和语言? –

回答

14

CardLayout为此,工程还有以下建议。

enter image description here

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Random; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

/** @see http://stackoverflow.com/questions/6432170 */ 
public class CardPanel extends JPanel { 

    private static final Random random = new Random(); 
    private static final JPanel cards = new JPanel(new CardLayout()); 
    private static final JComboBox combo = new JComboBox(); 
    private final String name; 

    public CardPanel(String name) { 
     this.name = name; 
     this.setPreferredSize(new Dimension(320, 240)); 
     this.setBackground(new Color(random.nextInt())); 
     this.add(new JLabel(name)); 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       create(); 
      } 
     }); 
    } 

    private static void create() { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     for (int i = 1; i < 9; i++) { 
      CardPanel p = new CardPanel("Panel " + String.valueOf(i)); 
      combo.addItem(p); 
      cards.add(p, p.toString()); 
     } 
     JPanel control = new JPanel(); 
     combo.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JComboBox jcb = (JComboBox) e.getSource(); 
       CardLayout cl = (CardLayout) cards.getLayout(); 
       cl.show(cards, jcb.getSelectedItem().toString()); 
      } 
     }); 
     control.add(combo); 
     f.add(cards, BorderLayout.CENTER); 
     f.add(control, BorderLayout.SOUTH); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 
} 
+1

感谢您的踢JComboBox + CardLayout +1 – mKorbel

+2

另请参阅此相关[示例](http://stackoverflow.com/questions/5654926/implementing-back-forward-buttons-in-swing/5655843#5655843)。 – trashgod

+0

本例扩展'JPanel'来添加一个名称,但['Component'](http://download.oracle.com/javase/6/docs/api/java/awt/Component.html)具有'getName() '和'setName()'方法作为替代方法。 – trashgod

相关问题