Java JTree进度条在选择时空白

Java JTree进度条在选择时空白,java,swing,jtree,jprogressbar,treecellrenderer,Java,Swing,Jtree,Jprogressbar,Treecellrenderer,我对JTree有一个问题,在初始选择时项目会空白,并且在取消选择之前不会反映进度条。参考.gif: 代码: 我对Java还是很陌生,所以我不确定我在这方面会出什么问题。我们将不胜感激 编辑添加指向显示问题的可行程序的链接。它还不是最小的,但是我正在创建一个最小的。 以下是一个简单的CreatureCellEditor示例: import java.awt.*; import java.util.EventObject; import javax.swing.*; import javax.sw

我对JTree有一个问题,在初始选择时项目会空白,并且在取消选择之前不会反映进度条。参考.gif:

代码:

我对Java还是很陌生,所以我不确定我在这方面会出什么问题。我们将不胜感激

编辑添加指向显示问题的可行程序的链接。它还不是最小的,但是我正在创建一个最小的。
以下是一个简单的
CreatureCellEditor示例:

import java.awt.*;
import java.util.EventObject;
import javax.swing.*;
import javax.swing.tree.*;

class CreatureCellEditor extends DefaultTreeCellEditor {
    private JProgressBar bar = new JProgressBar();
    public CreatureCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
        super(tree, renderer);
    }
    @Override public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
        System.out.println(value);
        Component c = renderer.getTreeCellRendererComponent(tree, value, true, expanded, leaf, row, true);
        System.out.println(c.getSize());
        if (leaf) {
          return bar; //OK
        } else {
          return c; //NG
        }
    }
    @Override public boolean isCellEditable(EventObject anEvent) {
        return true;
    }
}

public class Main {
  public JComponent makeUI() {
    JTree treeCave = new JTree();
    DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
    treeCave.setCellRenderer(renderer);
    treeCave.setEditable(true);
    treeCave.setCellEditor(new CreatureCellEditor(treeCave, renderer));
    //treeCave.setEditable(true);
    JPanel p = new JPanel(new BorderLayout());
    p.add(new JScrollPane(treeCave));
    return p;
  }
  public static void main(String... args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new Main().makeUI());
    f.setSize(320, 240);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}
考虑提供一个说明你的问题的方法。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将减少混乱和更好的响应
import java.awt.*;
import java.util.EventObject;
import javax.swing.*;
import javax.swing.tree.*;

class CreatureCellEditor extends DefaultTreeCellEditor {
    private JProgressBar bar = new JProgressBar();
    public CreatureCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
        super(tree, renderer);
    }
    @Override public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
        System.out.println(value);
        Component c = renderer.getTreeCellRendererComponent(tree, value, true, expanded, leaf, row, true);
        System.out.println(c.getSize());
        if (leaf) {
          return bar; //OK
        } else {
          return c; //NG
        }
    }
    @Override public boolean isCellEditable(EventObject anEvent) {
        return true;
    }
}

public class Main {
  public JComponent makeUI() {
    JTree treeCave = new JTree();
    DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
    treeCave.setCellRenderer(renderer);
    treeCave.setEditable(true);
    treeCave.setCellEditor(new CreatureCellEditor(treeCave, renderer));
    //treeCave.setEditable(true);
    JPanel p = new JPanel(new BorderLayout());
    p.add(new JScrollPane(treeCave));
    return p;
  }
  public static void main(String... args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new Main().makeUI());
    f.setSize(320, 240);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}