在JEditorPane中设置新文本

时间:2013-05-07 09:31:26

标签: java swing inheritance jeditorpane

在扩展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”!并没有向我显示任何错误,只是没有发生任何事情。

1 个答案:

答案 0 :(得分:1)

代码行

parser GooBlog = new parser(url);

不仅可以实例化解析器,还可以实例化新的Index / JFrame。这个新创建的JEditorPane的{​​{1}}在方法JFrame中使用,由于框架不可见,所以不会发生任何事情。

解决方案可能是提供对helloJFrame方法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