0

このエラーが発生しているので、このスクリプトから本当にイライラします...

    JPanel menu = new JPanel() {
            private static final long serialVersionUID = 1L;
            JTextArea output = new JTextArea(5, 30) {

                /**
                 * 
                 */
                private static final long serialVersionUID = 4714318125998709253L;
                this.setEditable(false);
            };
            JScrollPane scrollPane = new JScrollPane(output);

//          public void run() {
//              System.out.println("lol");
//              JPanel menu = this;
//              JButton restart = new JButton("Restart");
//              menu.add(restart);
//          }

        };

JTextArea出力内でsetEditableを宣言しようとしています...何かアイデアはありますか?

編集:エラーは次のとおりです:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: 
    Syntax error on token ";", < expected

    at citadelRPG.Server.createAndShowGUI(Server.java:94)
    at citadelRPG.Server.access$0(Server.java:16)
    at citadelRPG.Server$1.run(Server.java:162)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

serialVersionUIDを宣言するセミコロンに表示されます。

4

2 に答える 2

3

ステートメント

this.setEditable(false);

の匿名実装のクラスブロックではなく、メソッド、静的初期化子、またはコンストラクターに存在する必要がありますJTextArea output。この実装をクラス内に本当に入れたい場合はoutput、オーバーライドできますisEditable

@Override
public boolean isEditable() {
   return false;
}
于 2013-03-18T20:21:16.317 に答える
1

これthis.setEditable(false);は、コンストラクターまたはメソッドのコンテキスト内で定義する必要があります。これらのコンテキストの外で呼び出すことはできません。

人々がこのようにクラスを実装することを主張するのは非常に奇妙に思えますが、それは私だけです。

に新しい機能を追加していないので、 、 、JPanelを作成して、それらをまとめて追加してみませんか。これにより、コードが読みやすくなり、このようなばかげた間違いが解決されます。JTextareaJScrollPane

個人的には、より良い解決策は...

JPanel menu = new JPanel() {
    private static final long serialVersionUID = 1L;
};
JTextArea output = new JTextArea(5, 30) {
    private static final long serialVersionUID = 4714318125998709253L;
};
output.setEditable(false);
JScrollPane scrollPane = new JScrollPane(output);
menu.add(scrollPane);
于 2013-03-18T20:23:14.333 に答える