WCJ2903162766 2023-10-28 18:39 采纳率: 87.5%
浏览 9
已结题

关于#java#的问题:单选按钮和组合框怎么组合起来?

当选择那“控计学院”时,组合框中显示信安和智能班级,当选择“电气学院”时,组合框显示电气和通信班级。
我点按钮显示的是乱码


package zuoye;

import java.awt.FlowLayout;
import java.awt.Label;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
class Demo implements ItemListener{
    private JFrame frame;
    private JPanel panel;
    private JComboBox<String[]> jb;
    private JRadioButton jr1,jr2;
    private Label l1,l2,l3,l4;
    private String f1[],f2[];
    Demo(){
        f1 = new String[] {"信安2201","智能2201"};
        f2 = new String[] {"电气2201","通信2201"};
        frame = new JFrame("选项类组件");
        frame.setSize(400,400);
        panel = new JPanel();
        panel.setSize(400,400);
        frame.add(panel);
        jr1 = new JRadioButton("控计学院");
        jr2 = new JRadioButton("电气学院");
        ButtonGroup bg = new ButtonGroup();
        bg.add(jr1);
        bg.add(jr2);
        jb = new JComboBox();
        jb.setEditable(false);
        jr1.addItemListener(this);
        jr2.addItemListener(this);
        panel.add(jr1);
        panel.add(jr2);
        panel.add(jb);
        frame.setLayout(new FlowLayout());
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
    public void itemStateChanged(ItemEvent e) {
        jb.removeAllItems();
        if(e.getItem().equals(jr1))
        {jb.addItem(f1);System.out.println(f1);}
        else if(e.getItem().equals("电气学院")) 
        {jb.addItem(f2);System.out.println(f2);}
    }
}
public class zuoye1 {
    public static void main(String[] args) {
        Demo l1 = new Demo();
    }

}

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-29 04:29
    关注

    【以下回答由 GPT 生成】

    问题分析: 在代码中,我们可以看到有一个JComboBox对象jb,它是用来显示选项的组合框。而且有两个单选按钮jr1和jr2,用来控制组合框中显示的选项。当jr1被选中时,组合框中显示的选项是f1,当jr2被选中时,组合框中显示的选项是f2。但是在代码中出现了乱码的问题,可能是由于编码问题导致的。

    解决方案: 1. 首先,我们需要将f1和f2的类型改为String[],而不是String[]类型的数组。因为JComboBox的构造方法需要传入一个String[]类型的数组作为选项。

    private String[] f1,f2;
    
    1. 在Demo构造函数中,我们需要为jb组合框设置默认的选项。可以在构造函数中添加以下代码:
    jb.addItem(f1[0]);
    jb.addItem(f1[1]);
    
    1. 在itemStateChanged方法中,我们需要在更新组合框中的选项之前,先获取当前选择的单选按钮的文本内容。可以在代码中添加以下代码:
    String selectedText = ((JRadioButton)e.getSource()).getText();
    
    1. 接下来,我们可以根据当前选择的单选按钮的内容,更新组合框中的选项。可以在这里使用switch结构,根据不同的选择更新组合框中的选项。可以在代码中添加以下代码:
    switch(selectedText) {
        case "控计学院":
            jb.removeAllItems();
            jb.addItem(f1[0]);
            jb.addItem(f1[1]);
            break;
        case "电气学院":
            jb.removeAllItems();
            jb.addItem(f2[0]);
            jb.addItem(f2[1]);
            break;
        default:
            break;
    }
    

    完整代码如下:

    import java.awt.FlowLayout;
    import java.awt.Label;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    
    import javax.swing.ButtonGroup;
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JRadioButton;
    import javax.swing.JTextField;
    
    class Demo implements ItemListener{
        private JFrame frame;
        private JPanel panel;
        private JComboBox<String> jb;
        private JRadioButton jr1,jr2;
        private Label l1,l2,l3,l4;
        private String[] f1,f2;
    
        Demo(){
            f1 = new String[] {"信安2201", "智能2201"};
            f2 = new String[] {"电气2201", "通信2201"};
    
            frame = new JFrame("选项类组件");
            frame.setSize(400, 400);
    
            panel = new JPanel();
            panel.setSize(400, 400);
            frame.add(panel);
    
            jr1 = new JRadioButton("控计学院");
            jr2 = new JRadioButton("电气学院");
    
            ButtonGroup bg = new ButtonGroup();
            bg.add(jr1);
            bg.add(jr2);
    
            jb = new JComboBox<String>();
            jb.setEditable(false);
            jr1.addItemListener(this);
            jr2.addItemListener(this);
    
            panel.add(jr1);
            panel.add(jr2);
            panel.add(jb);
    
            frame.setLayout(new FlowLayout());
            frame.setResizable(false);
            frame.setVisible(true);
            frame.setLocationRelativeTo(null);
    
            jb.addItem(f1[0]);
            jb.addItem(f1[1]);
        }
    
        public void itemStateChanged(ItemEvent e) {
            String selectedText = ((JRadioButton)e.getSource()).getText();
            switch(selectedText) {
                case "控计学院":
                    jb.removeAllItems();
                    jb.addItem(f1[0]);
                    jb.addItem(f1[1]);
                    break;
                case "电气学院":
                    jb.removeAllItems();
                    jb.addItem(f2[0]);
                    jb.addItem(f2[1]);
                    break;
                default:
                    break;
            }
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            new Demo();
        }
    }
    

    这样,当选择不同的单选按钮时,组合框中的选项会正确显示。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 10月28日

悬赏问题

  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题
  • ¥15 有没有人能解决下这个问题吗,本人不会编程
  • ¥15 plotBAPC画图出错
  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗