在扩展JEditorPane
的子类Index
中的JFrame
中设置新文本时遇到问题。
package gui;
...
public class Index extends JFrame {
JEditorPane editorPaneMR = new JEditorPane();
public static void main(String[] args) {
...
}
public Index() {
JButton SearchButton = new JButton("OK");
SearchButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
parser GooBlog = new parser(url);
try {
GooBlog.hello(); // Go to subclass parser
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
这个子类的代码叫做parser
package gui;
public class parser extends Index{
String url;
public parser (String urlInput){
this.url = urlInput;
}
public void hello () throws IOException{
editorPaneMR.setText("Hello World");
}
}
问题是,当我按下OK按钮时,它没有向我显示JEditorPane中的文本“Hello world”!并没有向我显示任何错误,只是没有发生任何事情。
答案 0 :(得分:1)
代码行
parser GooBlog = new parser(url);
不仅可以实例化解析器,还可以实例化新的Index
/ JFrame
。这个新创建的JEditorPane
的{{1}}在方法JFrame
中使用,由于框架不可见,所以不会发生任何事情。
解决方案可能是提供对hello
或JFrame
方法JEditorPane
的引用,例如
hello
然后将通过
调用public class Parser { // does no longer extend Index
String url;
public Parser(String urlInput) {
this.url = urlInput;
}
public void hello(JEditorPane editorPane) { // has argument now
editorPane.setText("Hello World");
}
}
注意:请坚持常见的Java编码标准并使用大写名称来表示类,即Parser gooBlog = new Parser(url);
gooBlog.hello(Index.this.editorPaneMR);
而不是Parser
,以及小写变量/字段/方法名称,例如parser
。