0

我有两个类,一个叫做 CreateDefault,它为我的程序创建 GUI 设置。我的另一个类是 tabPanePopup,它为与 CreateDefault 关联的 JTabbedPane 创建一个弹出窗口及其命令。

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

上面的代码,返回计数。计数,计算创建了多少个新文档。getCount() 是 CreateDefault 类的一部分。

下面的代码是 tabPanePopup 的一部分。newTab 执行的操作已经写出。在 CreateDefault 中,最初 count = 1,然后在 GUI 完全创建时增加 1,总计 count = 2。在 tabPanePopup 类中调用 getCount() 时,getCount() 应该返回 2,但它返回 1。如果我在 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 回答