【问题标题】:JComboBox get itemJComboBox 获取项目
【发布时间】:2016-02-20 13:06:49
【问题描述】:

我有一个简单的问题。没看懂……

我有一个 JFrame,我在其中添加了一个 JComboBox:

            JComboBox<String> Team_ComboBox = new JComboBox<>();
        Team_ComboBox_Handler ComboBox_Listener = new Team_ComboBox_Handler();
        Team_ComboBox.addActionListener(ComboBox_Listener);
        Team_ComboBox.addItem("Test 1");
        Team_ComboBox.addItem("Test 2");

在这个框架上,我有一个打开另一个 JFrame 的按钮。

            Play = new JButton();
        Play.setText("Play");
        Play.setPreferredSize(dimension);
        Play.addActionListener(menuhandler);
        private class main_menuhandler implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==Play){
                teams Team = new teams();
                Team.teams();

                disposeMainMenue();
            }
            if(e.getSource()==Close) {
                System.exit(DO_NOTHING_ON_CLOSE);
            }
        }
    }

无论如何,我想将 Combobox 的 Selected 值传递给另一个类的方法。我知道如何在方法本身中获取组合框的 itemvalue(使用 getselecteditem)但是如何在 ActionPerformed 方法中做到这一点,因为我无法访问 ActionPerformed 方法中的组合框......我创建了另一个 ActionListener( comboBox_Listener) 但我还没有在里面放任何代码...

有什么想法吗?提前非常感谢

【问题讨论】:

标签: java swing actionlistener jcombobox


【解决方案1】:

我觉得有几个问题:

您的主要问题:

但是我如何在 ActionPerformed 方法中做到这一点,因为我无法访问 ActionPerformed 方法中的组合框

您可能最好的解决方案是更改您的代码和变量声明位置,以便您可以从 actionPerformed 方法访问 JComboBox。如果您从方法或构造函数中声明组合框,请将其更改为该类的正确实例字段。

其他问题:

  • 您不应创建多个 JFrame。如果您需要一个依赖窗口,那么应该是一个 JDialog。如果没有,请考虑使用 CardLayout 交换视图。
  • 学习并遵循 Java 命名约定,以便其他人更好地理解您的代码。例如,类名以大写字母开头,而方法和变量名则不是。
  • 我不确定你为什么这样做:System.exit(DO_NOTHING_ON_CLOSE);。为什么要将该常量传递给 exit 方法?

【讨论】:

  • 完美!非常感谢!我知道我错过了什么。
  • 我肯定需要习惯命名约定
【解决方案2】:

为您的动作侦听器类使用构造函数:

private class main_menuhandler implements ActionListener {

    private JComboBox<String> Team_ComboBox;

    public main_menuhandler(JComboBox<String> Team_ComboBox){
        this.Team_ComboBox = Team_ComboBox;
    }
}

现在您可以通过构造函数创建类main_menuhandler并将组合框添加到其中。 在您的 Overriden 操作中,您可以访问它。

尝试解决这个问题,因为您的代码 sn-p 不够广泛,无法实际提供正确的代码。但这应该回答你的问题

【讨论】:

  • 这会很好用,并且如果 OP 希望使处理程序类成为一个适当的单独类,它会更容易。 1+
  • 一点设计模式和片段而不是多帧也可以解决这个问题,但是 OP 很可能是初学者,只会更加困惑,因此是 imo 'dirty' 解决方案跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 2014-05-26
相关资源
最近更新 更多