Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据组合框选择更改UI_Java_Swing_User Interface_Cardlayout - Fatal编程技术网

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

Java 如何根据组合框选择更改UI,java,swing,user-interface,cardlayout,Java,Swing,User Interface,Cardlayout,在对话框中,如果选中某个组合,我需要显示一组控件,否则需要显示另一组控件。 也就是说,我需要两层,当组合被选中/取消选中时,我需要在它们之间切换。我该怎么做 谢谢正如下面建议的那样,这很好 import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.eve

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

谢谢

正如下面建议的那样,这很好

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);
    }
}

导入java.awt.BorderLayout;
导入java.awt.CardLayout;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.Random;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
/**@见http://stackoverflow.com/questions/6432170 */
公共类CardPanel扩展了JPanel{
私有静态最终随机=新随机();
私有静态最终JPanel卡=新JPanel(新CardLayout());
私有静态最终JComboBox组合=新JComboBox();
私有最终字符串名;
公共CardPanel(字符串名称){
this.name=名称;
此.setPreferredSize(新维度(320240));
这个.setBackground(新颜色(random.nextInt());
添加(新JLabel(名称));
}
@凌驾
公共字符串toString(){
返回名称;
}
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
创建();
}
});
}
私有静态void create(){
JFrame f=新的JFrame();
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
对于(int i=1;i<9;i++){
CardPanel p=新的CardPanel(“面板”+字符串.valueOf(i));
复合添加剂(p);
添加(p,p.toString());
}
JPanel控件=新的JPanel();
combo.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
JComboBox jcb=(JComboBox)e.getSource();
CardLayout cl=(CardLayout)cards.getLayout();
cl.show(cards,jcb.getSelectedItem().toString());
}
});
控件。添加(组合);
f、 添加(卡片、边框布局、中心);
f、 添加(控件,BorderLayout.SOUTH);
f、 包装();
f、 setLocationRelativeTo(空);
f、 setVisible(真);
}
}

另请参见此相关。此示例扩展了
JPanel
以添加名称,但有
getName()
setName()
方法作为替代方法。我看到的,恭喜,+++第二位真正的Swing大师+++,gooood@nIcEcOw:谢谢你的评论;例如,我还一直在试验
Color.getHSBColor
。仅用于演示目的。