从事件中的不同 class 获取值
Get value from different class inside an event
我有两个 classes:
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) 因为 table 不会为空,除非我将 setRowCount(0) 放在其他someClass class.
中的方法
基本java访问说明符的东西.....你如何从randomMethod()
调用这个私有方法getRandomString
? class 的私有方法的可见性仅在 class,而不是其他任何地方。因此,您的以下代码:
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.Whosebug.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");
}
}
现在亚军class:
package com.Whosebug.solutionmaker;
public class WhosebugSolutionsRunner {
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 smart IDE 或 Jcreator,您可以看到您的私有访问说明符导致出现红色消息。
我有两个 classes:
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) 因为 table 不会为空,除非我将 setRowCount(0) 放在其他someClass class.
中的方法基本java访问说明符的东西.....你如何从randomMethod()
调用这个私有方法getRandomString
? class 的私有方法的可见性仅在 class,而不是其他任何地方。因此,您的以下代码:
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.Whosebug.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");
}
}
现在亚军class:
package com.Whosebug.solutionmaker;
public class WhosebugSolutionsRunner {
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 smart IDE 或 Jcreator,您可以看到您的私有访问说明符导致出现红色消息。