0

を拡張JEditorPaneするサブクラスで新しいテキストを設定するときに問題に直面しています。IndexJFrame

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();
                }
            }
        }
    }
}

そして、これはパーサーと呼ばれるサブクラスのコードです

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" というテキストが表示されないことです! エラーは表示されません。何も起こりませんでした。

4

1 に答える 1

1

コード行

parser GooBlog = new parser(url);

パーサーだけでなく、新しいIndex/もインスタンス化しますJFrame。このJEditorPane新しく作成された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");
    }
}

その後、経由で呼び出されます

Parser gooBlog = new Parser(url);
gooBlog.hello(Index.this.editorPaneMR);

注:一般的な Java コーディング標準に準拠し、クラス名にはParserの代わりに大文字を使用しparser、変数/フィールド/メソッド名には小文字を使用してください (例: gooBlog.

于 2013-05-07T17:50:53.640 に答える