如何在类之外使用comboBox变量或在comboBox方法中使用变量

时间:2013-12-23 22:49:36

标签: java swing methods combobox frame

我在java-eclipse中编码并尝试使用comboBox来获取值,但这些值在另一个要使用的函数中不可见。每当我尝试将类移动到声明了comboBox的类的内部时,函数变量就会变得不可见。 这是一步一步的问题; 1.这是我想使用comboBox值的方法;

public void ata(int P1_x, int P1_y, int P2_x, int P2_y, String P1_direction, String P2_direction,int array[][],int array1[][])
{  
        if(P1_direction=="Horizontal")
        {
            gemiatadikey(P1_x,P1_y,array);
        }
        else
        {
            gemiatayatay(P1_x,P1_y,array);
        }
        if(P2_direction == "Horizontal")
        {
            gemiatadikey(P2_x, P2_y,array1);
        }
        else
            gemiatayatay(P2_x, P2_y,array1);

起初我正在自己初始化值并且它正在工作但我需要通过使用面板上的任何东西从用户获取这些值,因为我没有JFrame和Panels的经验然后除了使用之外我找不到任何东西从WindowBuilder的Desing部分开始,我添加了combobexes并添加了一些选项。然后我的项目中添加了一些代码,并尝试使用此代码获取值;

public void actionPerformed(ActionEvent e) {
            JComboBox comboBox = new JComboBox();
            comboBox.setModel(new DefaultComboBoxModel(new String[] {"Horizontal", "Vertical"}));
            String P1_direction = comboBox.getSelectedItem().toString();

            JComboBox comboBox_1 = new JComboBox();
            comboBox_1.setModel(new DefaultComboBoxModel(new String[] {"Horizontal", "Vertical"}));
            String P2_direction = comboBox_1.getSelectedItem().toString();

            JComboBox comboBox_2 = new JComboBox();
            comboBox_2.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}));
            String P1_x = comboBox_2.getSelectedItem().toString();
            int P1_coordinate_x = Integer.parseInt(P1_x);

            JComboBox comboBox_3 = new JComboBox();
            comboBox_3.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}));
            String P1_y = comboBox_3.getSelectedItem().toString();
            int P1_coordinate_y = Integer.parseInt(P1_y);

            JComboBox comboBox_4 = new JComboBox();
            comboBox_4.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}));
            String P2_x = comboBox_4.getSelectedItem().toString();
            int P2_coordinate_x = Integer.parseInt(P2_x);

            JComboBox comboBox_5 = new JComboBox();
            comboBox_5.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}));
            String P2_y = comboBox_5.getSelectedItem().toString();
            int P2_coordinate_y = Integer.parseInt(P2_y);

        }
    });

然后我试着将我的“ata”方法称为;

  ata(P1_coordinate_x, P1_coordinate_y, P2_coordinate_x, P2_coordinate_y, P1_direction, P2_direction, gemiOlanArray, gemiOlanArray1);

但它不起作用,因为这个声明没有看到(或得到)P1_coordinate_x,......等......我很确定我做错了但是我不熟悉这些概念所以怎么能我处理这个?谢谢

1 个答案:

答案 0 :(得分:1)

遗憾的是,您当前发布的代码毫无意义:

public void actionPerformed(ActionEvent e) {
  JComboBox comboBox = new JComboBox();
  comboBox.setModel(new DefaultComboBoxModel(new String[] {"Horizontal", "Vertical"}));
  String P1_direction = comboBox.getSelectedItem().toString();

你正在创建一个新的JComboBox,而不是在任何地方显示它,并且在任何用户有机会对它做任何事情之前立即从中提取选择,这将无法工作。

建议:

  • 不要在任何地方“移动你的组合框”。将它们保存在它们所属的GUI中。
  • 确保您的JComboBox声明为实例字段,并且未在方法或构造函数内声明,其中每个作用域规则只在声明它们的作用域内可见。
  • 如果您需要外部类来检查JComboBox的状态,那么给出保留的类并显示它们返回当前所选项目或感兴趣组合索引的公共方法。
  • 有关更具体的帮助,请考虑告诉我们有关您的问题的更多信息并显示更相关的代码,最好是sscce

例如,

  

我...尝试使用comboBox来获取值,但这些值在另一个要使用的函数中不可见。

什么都看不见?哪里?您是否已将JComboBox声明为类字段(您应该)或者它们是某些方法或构造函数的本地字段吗?

  

每当我尝试将类移动到声明了comboBoxes的类的内部时,函数变量就会变得不可见。


修改

关于您最新发布的代码,再次注定会失败:

public void actionPerformed(ActionEvent e) {
        JComboBox comboBox = new JComboBox();
        comboBox.setModel(new DefaultComboBoxModel(new String[] {"Horizontal", "Vertical"}));
        String P1_direction = comboBox.getSelectedItem().toString();

        JComboBox comboBox_1 = new JComboBox();
        comboBox_1.setModel(new DefaultComboBoxModel(new String[] {"Horizontal", "Vertical"}));
        String P2_direction = comboBox_1.getSelectedItem().toString();

        JComboBox comboBox_2 = new JComboBox();
        comboBox_2.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}));
        String P1_x = comboBox_2.getSelectedItem().toString();
        int P1_coordinate_x = Integer.parseInt(P1_x);

        JComboBox comboBox_3 = new JComboBox();
        comboBox_3.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}));
        String P1_y = comboBox_3.getSelectedItem().toString();
        int P1_coordinate_y = Integer.parseInt(P1_y);

        JComboBox comboBox_4 = new JComboBox();
        comboBox_4.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}));
        String P2_x = comboBox_4.getSelectedItem().toString();
        int P2_coordinate_x = Integer.parseInt(P2_x);

        JComboBox comboBox_5 = new JComboBox();
        comboBox_5.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}));
        String P2_y = comboBox_5.getSelectedItem().toString();
        int P2_coordinate_y = Integer.parseInt(P2_y);

    }
});

如上所述,您正在创建从未在GUI上显示的JComboBox,并尝试在用户有机会与其进行交互之前从中提取信息,即使它们显示在GUI中也是如此。这些错误中的任何一个都足以使代码失败。

此代码也出错:

public void ata(int P1_x, int P1_y, int P2_x, int P2_y, String P1_direction, String P2_direction,int array[][],int array1[][])
{  
        if(P1_direction=="Horizontal")
        {
            gemiatadikey(P1_x,P1_y,array);
        }

因为您使用==来比较字符串而不是equals(...)方法。 ==比较一个对象是否与另一个对象相同,这不是您想要知道的。您想知道字符串是否具有相同的信息,相同的字符具有相同的顺序,因此您需要使用equals(...)equalsIgnoreCase(...)方法。

还有太多你没有向我们展示,例如你宣布和展示你的JComboBoxes的地方。 再次你是在课堂上声明它们(是的,这样做!)还是在方法或构造函数中声明(不,不要这样做!)?您是尝试从一个类还是从一个单独的类访问JComboBox?请考虑按照上述要求发布SSCCE。请澄清。

顺便说一句 - 你应该避免使用Window-Builder,直到你理解了你正在使用的库,因为使用它可以让你不必学习库的许多细微差别。现在,请手动编写Swing GUI代码,参考Swing教程和Java API。