0

2 つのクラスがあり、1 つは CreateDefault と呼ばれ、プログラムの GUI 設定を作成します。もう 1 つのクラスは tabPanePopup で、CreateDefault に関連付けられた JTabbedPane のポップアップとそのコマンドを作成します。

public int getCount() { return this.count; }

上記のコードは、count を返します。カウント、作成された新しいドキュメントの数をカウントします。getCount() は CreateDefault クラスの一部です。

以下のコードは、tabPanePopup の一部です。newTab が実行するアクションは既に書き出されています。CreateDefault では元々 count = 1 で、GUI が完全に作成されると 1 増加し、合計 count = 2 になります。 CreateDefault クラスで count に対して println 関数を実行すると、2 が出力されますが、tabPanePopup では 1 が出力されます。これを行う理由はありますか?GUI の作成時に count++ 以外はまったく変更しません。GUI が作成されるまで getCount() 関数を呼び出すことはできません。

newTab.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent action) {
            CreateDefault get = new CreateDefault();
            int count = get.getCount();
            String parsed = Integer.toString(count);
            Font myFont = new Font("Calibri", Font.BOLD, 12);
            JEditorPane editorPane = new JEditorPane();
            JScrollPane scrollPane = new JScrollPane(editorPane,
                    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            LineCounter counter = new LineCounter(editorPane);
            UndoManager manager = new UndoManager();
            Document document = editorPane.getDocument();
            document.addUndoableEditListener(manager);
            scrollPane.setRowHeaderView(counter);
            counter.setBackground(Color.white);
            tabPane.setFont(myFont);
            tabPane.addTab("New Document " + parsed, scrollPane);
            tabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
            get.setCount(count++);
        }   
    });
4

1 に答える 1

1

あなたのコードにはまだ明らかにされていないことがたくさんあるので、これは推測にすぎませんが、上記のメソッドで新しい CreateDefault オブジェクトを作成しているようで、CreateDefault インスタンスとはまったく無関係である可能性があります。それは真のカウント結果を保持しています。重要なのは、新しいオブジェクトを作成して呼び出すのではなく、元のインスタンスgetCount()でこのメソッドを呼び出すことです。解決策は、どうにかしてこの元のインスタンスへの参照を取得することです。

したがって、代わりに:

public void actionPerformed(ActionEvent action) {
  CreateDefault get = new CreateDefault();
  int count = get.getCount();

次のようにします。

public void actionPerformed(ActionEvent action) {
  // CreateDefault get = new CreateDefault();
  int count = createDefault.getCount();

ここで、createDefault 変数は何らかの形で元の CreateDefault インスタンスを参照します。

于 2012-07-03T02:56:42.107 に答える