gpt4 book ai didi

java - 如何在Java表格中显示进度列

转载 作者:行者123 更新时间:2023-12-02 02:19:41 27 4
gpt4 key购买 nike

所以我正在创建一个包含三列的项目;第一个是复选框列,第二个是字符串(形成 Neo4j 数据库的单词),第三个是进度条。

所有列都显示并且工作正常,但进度栏列看起来不可见。这是一些代码:

    //CONSTRUCTOR
public BiogramTableJSedit2Jan9()
{
//*************************************************
//* SETTING UP THE FORM *
//*************************************************
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(200,200,800,300);
setTitle("Netword Data Table");
getContentPane().setLayout(null);

//*************************************************


//********************************************
//CREATING TABLE BLOCK *
//********************************************

//ADD SCROLLPANE
JScrollPane scroll=new JScrollPane();
scroll.setBounds(70,80,600,200);
getContentPane().add(scroll);

//THE TABLE
final JTable table=new JTable();
scroll.setViewportView(table);


//THE MODEL OF THE TABLE
DefaultTableModel model=new DefaultTableModel()
{
//****************************************
//* SETTING TABLE COLUMNS BLOCK *
//****************************************
public Class<?> getColumnClass(int column)
{
switch(column)
{
case 0: // |This is the first column
return Boolean.class; // |First column is set to Boolean as it will contain check boxes
case 1: // |This is the second column
return String.class; // |Second column set to String as it will contain strings
case 2:
return JProgressBar.class; // |This is for the progress bar column (IN PROGRESS - NOT DISPLAYED YET...)

default:
return String.class; // |The table is set to String as default
}
}
};


//Create and run the query in the table
neoQuery= Q1();
resultVariable = session.run(neoQuery.get());



//ASSIGN THE MODEL TO TABLE
table.setModel(model);

model.addColumn("Select"); // |Column for check boxes
model.addColumn("Bigrams"); // |Column for Bigrams

table.getColumn("Status").setCellRenderer(new ProgressCellRender());

//**********************************************
ProgressWorker worker = new ProgressWorker(model); //HAVE AN ERROR HERE
worker.execute();

这是进度渲染器类:

//a table cell renderer that displays a JProgressBar
public class ProgressCellRender extends JProgressBar implements TableCellRenderer {

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
int progress = 0;
if (value instanceof Float) {
progress = Math.round(((Float) value) * 100f);
} else if (value instanceof Integer) {
progress = (int) value;
}
setValue(progress);
return this;
}
}

现在您可以看到我正在使用 getColumn 来显示此列,但是当我运行它时,您可以看到第一个和第二个列,但看不到进度栏列。我希望它看起来与此类似:

JTable with progress bar column example

我还有一个未完全实现的进度 worker 类。

private static class ProgressWorker extends SwingWorker<Void, Integer> 
{ //Swing worker class for updating the progress bar

private BiogramTableJSedit2Jan9 model;

private final JProgressBar progress; //declaration for progress bar

public ProgressWorker(JProgressBar model)
{
this.progress = model;

}

@Override
protected Void doInBackground() throws Exception {

return null;
}

如果有人能向我解释为什么口渴栏没有显示,我将不胜感激。感谢您提前回复。

最佳答案

因为您发布的代码不是独立的,所以我一起设置了一个最小的测试与您已经发布的 ProgressCellRender 类一起使用。

重要的错误修复位于 DefaultTableModel 的方法 getColumnClass 中。它需要返回 Integer.classFloat.class 因为只有那些可以由您的 ProgressCellRender 处理。

当然,该列中的实际数据需要是IntegerFloat

public class Main {

public static void main(String[] args) {
SwingUtilities.invokeLater(Main::initGUI);
}

private static void initGUI() {
JFrame frame = new JFrame("TableModel JProgressBar Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JScrollPane scroll = new JScrollPane();
frame.getContentPane().add(scroll);

final JTable table = new JTable();
scroll.setViewportView(table);

DefaultTableModel model = new DefaultTableModel() {
public Class<?> getColumnClass(int column) {
switch (column) {
case 0:
return Boolean.class;
case 1:
return String.class;
case 2:
return Integer.class; // !!!!
default:
return String.class;
}
}
};
table.setModel(model);

model.addColumn("Active");
model.addColumn("Name");
model.addColumn("Progress");

table.getColumn("Progress").setCellRenderer(new ProgressCellRender());

model.addRow(new Object[] { true, "aaaa", 14 });
model.addRow(new Object[] { false, "bbbbbbbb", 0 });
model.addRow(new Object[] { true, "ccccc", 2 });

frame.pack();
frame.setVisible(true);
}
}

然后 JProgressBar 在表中正确呈现:

enter image description here

ProgessCellRender 中,您可能需要添加 setStringPainted(true); 以获取也呈现为文本的百分比。

关于java - 如何在Java表格中显示进度列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48704786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com