2

私は特定のアプリケーションを実行していますが、基本的なテキスト エディターだけで、タブと JMenu があったことを覚えています。そのため、[ファイル] --> [新規] を選択すると、JTabbedPane に別のタブが追加または「開く」ことになります。しかし、今回は私のためにそれを行っていません。誰か助けてもらえますか? これが私がそれをしている方法です:

newFile.addActionListener(
                new ActionListener(){
                    public void actionPerformed(ActionEvent event){
                        tabs.addTab("new file", text);
                    }
                }
        );

したがって、クリックすると別のタブが追加されるはずですが、何らかの理由ではありません...問題がある場合は、最初にデフォルトのタブが開いており、新しいをクリックすると古いタブが消去されます。助けてくれてありがとう!(これ以上説明が必要かどうか尋ねてください) ここの編集者が私がコードを入れる方法が正しくフォーマットされていないと言い続けたので、ここにコードをアップロードしました:
http://nardcake.com/java
そこには2つのファイルがあり、1つは初期化されますそれと他のものは他のすべてですありがとう!

4

1 に答える 1

2

試す:

tabs.revalidate();
tabs.repaint();

これらの 2 行を削除し (これらの 2 行はいずれにせよ、最後に addTab() メソッドによって呼び出されます)、init.java を次のように書き直しました。

 public static void main(String[] args) {
 System.out.println(SwingUtilities.isEventDispatchThread()); // 1
 SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            System.out.println(SwingUtilities.isEventDispatchThread()); //2
            EBLFWE window = new EBLFWE();
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            window.setExtendedState( window.getExtendedState()|JFrame.MAXIMIZED_BOTH );
            window.setSize(1024, 728);
            window.setVisible(true);
        }
    });

それは今動作します。自分自身を引用するには:

Swing コンポーネントのすべての使用は、Event Dispatch Thread (略してEDT ) を介して行う必要があります。そうしないと、望ましくない視覚効果が得られる可能性があります。解説はこちらをご覧ください。

編集:

GUI 関連のコードはすべて EDT 上で実行する必要があります。次のように、コードの一部がEDTによって実行されるかどうかをテストできます。

 System.out.println(SwingUtilities.isEventDispatchThread());

true が出力された場合は、GUI の更新 (たとえば、Swing コンポーネント インスタンスのメソッドの呼び出し) を安全に実行できます - 1 や EBLFWE クラスのどこかのように。ただし、2 は false を出力します。これは、プログラムを実行するスレッドがEDTではないためです。

SwingUtilities.invokeLater()を呼び出すと、実際にはそのコードが実行されるように配置されます (EDT が適切と判断した時点で)、イベント ディスパッチ スレッドに配置されます。

EDT は実際の描画やその他の多くのタスクを実行するため、別のスレッドから GUI 更新コードを呼び出すと、順序が乱れ、不要な視覚的外観が得られる可能性があります。

于 2012-10-13T20:54:25.460 に答える