如何根据组合框选择更改 UI

Posted

技术标签:

【中文标题】如何根据组合框选择更改 UI【英文标题】:how to change UI depending on combo box selection 【发布时间】:2011-09-19 21:41:15 【问题描述】:

如果选中某些组合,我需要在对话框中显示一组控件,否则显示另一组控件。 IE。我需要 2 层,当组合被选中/取消选中时,我需要在它们之间切换。我该怎么做?

谢谢

【问题讨论】:

【参考方案1】:

CardLayout 可以很好地解决这个问题,如下所示。

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://***.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);
    

【讨论】:

另见此相关example。 本示例扩展 JPanel 以添加名称,但 Component 具有 getName()setName() 方法作为替代。 我所看到的,恭喜,+++第二位真正的摇摆大师+++,gooood @nIcEcOw:感谢您的评论;我也一直在试验Color.getHSBColor,对于example。 setPreferredSize() 仅用于演示目的。

以上是关于如何根据组合框选择更改 UI的主要内容,如果未能解决你的问题,请参考以下文章

如何根据从其他框中选择的文本更改动态创建的组合框的显示项

根据组合框选择更改文本框值

WPF:尝试根据组合框中的选择更改可见性

如何动态更改组合框显示成员

由于另一个组合框字符串值,如何更改组合框上的项目?

如何使用 VBA 根据值和组合框选择填充 excel 中的行?