【问题标题】:How do I declare a JComboBox?如何声明 JComboBox?
【发布时间】:2017-05-10 17:58:43
【问题描述】:

我正在创建一个使用下拉列表的程序,但我卡在了 JComboBox 框的声明行,我收到以下错误消息: 此行有多个标记 - 构造函数 JComboBox(String[]) 是 不明确的 - 行断点:JComboBox [行:25] - 组合框() 无论我如何尝试定义 JComboBox,我都会遇到某种错误。请帮帮我。

公共类的代码如下:

    import javax.swing.*;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    import javax.swing.JRadioButton;
    import javax.swing.ButtonGroup;
    import java.awt.event.ItemListener;
    import java.awt.event.ItemEvent;

    public class JComboBox extends JFrame {

        private JComboBox box;
        private JLabel picture;

        private static String[] filename = { "p.png", "i.png" };
        private Icon pics[] = { new ImageIcon(getClass().getResource(filename[0])),
                new ImageIcon(getClass().getResource(filename[1])) };

        public JComboBox() {

            super("This is the title");
            setLayout(new FlowLayout());

            JComboBox box = new JComboBox(filename);

            box.addItemListener(new ItemListener() {
                public void itemStateChanged(ItemEvent event) {
                    if (event.getStateChange() == ItemEvent.SELECTED) {
                        picture.setIcon(pics[box.getSelectedIndex()]);
                    }
                }
            });

            add(box);
            picture = new JLabel(pics[0]);
            add(picture);

        }

    }

这是主类的代码:

    import javax.swing.*;

    public class JComboBox1 extends JFrame {

        public static void main(String[] args) {


            JComboBox Box = new JComboBox();
            Box.setVisible(true);
            Box.setSize(400,400);
            Box.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        }

    }

谢谢。

【问题讨论】:

  • 您与现有的 Swing 类 javax.swing.JComboBox 存在名称冲突,您已使用 import javax.swing.* 导入了该类。尝试更改类名。
  • 谢谢!它解决了我的问题。我早该知道的,哈哈。

标签: java swing jcombobox


【解决方案1】:

正如@Andy 所提到的,您的问题是您的班级名称和摆动组件的名称发生了冲突。如果您绝对必须将您的类命名为 JComboBox,则必须通过完全限定名称来引用 swing 组件,因此

public class JComboBox extends JFrame {

    private javax.swing.JComboBox box;

如果您使用 IDE 将鼠标悬停在私有实例上,您应该会看到与您创建 JComboBox 类的包匹配的完全限定名称。为自己省点麻烦,重命名你的班级。

【讨论】:

  • 我猜这还不够。可能还需要摆脱import javax.swing.*。最好的答案是不要那样做。 不要将类命名为与标准库类完全相同。甚至避免使用 Swing 用来区分其类的前缀。这很令人困惑,并且会花费您的时间和悲伤。
  • 我总是更喜欢明确导入,但这只是我的偏好。以上只是为了更深入地了解正在发生的事情,但是是的,我同意你的观点,不要那样做是最好的答案。 :)
  • 我设法通过重命名类来修复它。我应该更清楚,这个错误是新手。谢谢大家!
  • 我很抱歉没有给你一个徽章“我接受这个答案”。我确定我现在做到了。再次感谢大家的帮助!祝你有美好的一天! :)
猜你喜欢
  • 2023-04-04
  • 2012-12-06
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
相关资源
最近更新 更多