2017-08-29 15 views
0

カスタムメソッドでJEditorPaneを作成したいとします。
新しい色付きのテキストをペインに追加する方法。JTextPaneにメソッドを追加する方法

コード:

console = new JTextPane() { 
    public void append() { 
     //***** 
    } 
}; 
console.append(); 

しかし、Eclipseはメソッドが使用されることはありませんと言うと、私はそれを呼び出すようにしようとすると、エラーがスローされます...私は何か間違ったことをやっていますか?

オブジェクトにメソッドを追加すると、はるかに効率的になります... ヘルパーに感謝!

+2

はこのような何かを試してみてください。コンパイラは単に 'console'を' JTextPane'とみなし、 'append()'がその型に存在することを知らない。実際にこれを行う必要がある場合は、適切なサブクラス(たとえば、 'MyTextPane extends JTextPane')を作成し、変数にもその型を使用します(例えば、' MyTextPane console = new MyTextPane(); ')。 – Thomas

答えて

1

consoleあなたはappend()を定義しJTextPaneタイプではない匿名クラスに依存しているので、あなたはappend()を呼び出すことはできません。

append()を匿名クラスの外に呼び出すには、JTextPaneのサブクラスを作成する必要があります。
それは理にかなっている場合、あなたは現在のクラスのプライベート静的クラスのメンバを定義することができます。

... 
private static class MyTextPane extends JTextPane { 

    public void append() { 
    // your code 
    } 
} 
... 
MyTextPane myTextPane = new MyTextPane(); 
myTextPane.append(); 
0

JTextPaneを拡張してそこにメソッドを追加する新しいクラスを作成することが望ましいと思います。

public class MyTextPane extends JTextPane { 

    public void append() { 
    // your code 
    } 
} 
0

はどうやらあなたはJTextPaneとしてconsoleを宣言しました。

割り当てでは、あなたの新しい方法でJTextPaneに拡張する「匿名の内部クラス」を作成します。

ただし、consoleJTextPaneと宣言されているため、方法についてはわかりません。あなたは彼らのスーパータイプ(またはインタフェース)を介して参照されている匿名のサブクラスにメソッドを追加することはできません

private MyAppendingTextPane console = myAppendingTextPane(); 

public static class MyAppendingTextPane extends JTextPane { 
    public void append(String line) { ... } 
} 
関連する問題