Java JTree进度条在选择时空白
我对JTree有一个问题,在初始选择时项目会空白,并且在取消选择之前不会反映进度条。参考.gif: 代码: 我对Java还是很陌生,所以我不确定我在这方面会出什么问题。我们将不胜感激 编辑添加指向显示问题的可行程序的链接。它还不是最小的,但是我正在创建一个最小的。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
以下是一个简单的
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);
}
}