从事件中的不同类中获取价值

时间:2015-01-25 13:22:55

标签: java swing instance instance-variables

我有两个班级:

public jComboBox() {
... // this is a autocomplete jComboBox btw
...
   combo.addItemListener(new ItemListener(){
        public void itemStateChanged(ItemEvent ie) {

            if(ie.getStateChange() == 1) {
                String selectedItem = (String)getSelectedItem();
                randomMethod(selectedItem);

         }
        }
    });
}

 private void randomMethod(String selectedItem){
    someClass sc = new someClass();
    String randomString = selectedItem;
    sc.getRandomString(randomString);

}

public someClass() {
...
...
  }
public void getRandomString(String randomString){
   defaultTableModel.setRowCount(0);
.. do-something ..
 }

这种方法好吗?如果没有,我需要一些替代方案,因为我遇到问题,例如,使用defaultTableModel.setRowCount(0)因为表不会为空,除非我将setRowCount(0)放在someClass类中的其他方法上。 / p>

1 个答案:

答案 0 :(得分:0)

基本的java访问说明符.....你如何从getRandomString调用这个私有方法randomMethod()?类的私有方法的可见性只是类,而不是其他任何地方。因此,您的以下代码:

 private void randomMethod(String selectedItem){
    someClass sc = new someClass();
    String randomString = selectedItem;
    fs.getRandomString(randomString); // This will not work

}
由于访问说明符private

无法正常工作。如果您可以允许访问权限特定于您拥有的包,则可以将其更改为:

protected void getRandromString(String randromString) {...}

只是为了证明我的意思:

package com.stackoverflow.solutionmaker;

public class Aclass {

    public Aclass(){
        somePrivMethod();
    }

    public void aMethod(){
        System.out.println("Can see me from anywehre bcoz I am public");
    }

    private void somePrivMethod(){
        System.out.println("Cannot find me from anywhere because I am private t Aclass");
    }

}

现在是跑步者班:

package com.stackoverflow.solutionmaker;

public class StackOverflowSolutionsRunner {

    public static void main(String[] args) {

        Aclass aClass = new Aclass(); // It will display"Cannot find me from anywhere because I am private t Aclass"

        aClass.aMethod(); // It will display "Can see me from anywehre bcoz I am public

        aClass.somePrivMethod(); // Will throw a compile-time error


    }
}

现在很好的练习从命令行编译这两个,看看你得到了什么错误信息。或者,使用Eclipse智能IDE或Jcreator,您可以看到您的私有访问说明符导致出现红色消息。