Hallo, ich möchte euch zuerst mal das Problem zeigen:
Der Fortschritt der Bar ist immer 0, denn getValueAt() funktioniert aus einem mir unerklärlichen Grund nicht...
So würde es funktionieren, aber ich frage mich wieso:
Weiß da vielleicht jemand bescheid? Vielen Dank. 😊
Java:
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class JTable1 {
static class Bar extends JProgressBar implements TableCellRenderer {
private final String description;
public Bar(String description) {
this.description = description;
setStringPainted(true);
}
public String getDescription() {
return description;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
return this;
}
}
static class Model extends AbstractTableModel {
List<Bar> bars = new ArrayList<>();
public void addABar() {
bars.add(new Bar(String.valueOf((char) (new Random().nextInt(10) + 'a'))));
}
public void setTestValue() {
bars.forEach(bar -> bar.setValue(25));
}
@Override
public int getRowCount() {
return bars.size();
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex == 0) {
return bars.get(rowIndex).getDescription();
}
if (columnIndex == 1) {
return bars.get(rowIndex); // does not work
}
return null;
}
@Override
public String getColumnName(int column) {
String[] names = {"Description", "Progress"};
return names[column];
}
}
public static void main(String[] args) {
Model model = new Model();
JTable table = new JTable(model);
table.getColumnModel().getColumn(1).setCellRenderer(new Bar("something"));
model.addABar();
model.addABar();
JFrame frame = new JFrame();
frame.add(new JScrollPane(table));
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
model.setTestValue();
model.fireTableDataChanged();
}
}
Der Fortschritt der Bar ist immer 0, denn getValueAt() funktioniert aus einem mir unerklärlichen Grund nicht...
So würde es funktionieren, aber ich frage mich wieso:
Java:
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class JTable2 {
static class Bar extends JProgressBar implements TableCellRenderer {
private final String description;
public Bar(String description) {
this.description = description;
setStringPainted(true);
}
public String getDescription() {
return description;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
return this;
}
}
static class Model extends AbstractTableModel {
List<Bar> bars = new ArrayList<>();
public void addABar() {
bars.add(new Bar(String.valueOf((char) (new Random().nextInt(10) + 'a'))));
}
public void setTestValue() {
bars.forEach(bar -> bar.setValue(25));
}
@Override
public int getRowCount() {
return bars.size();
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex == 0) {
return bars.get(rowIndex).getDescription();
}
if (columnIndex == 1) {
return bars.get(rowIndex); // does not work
}
return null;
}
@Override
public String getColumnName(int column) {
String[] names = {"Description", "Progress"};
return names[column];
}
}
public static void main(String[] args) {
Model model = new Model();
JTable table = new JTable(model) {
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
if (column == 1) {
return (TableCellRenderer) model.getValueAt(row, column);
}
return super.getCellRenderer(row, column);
}
};
model.addABar();
model.addABar();
JFrame frame = new JFrame();
frame.add(new JScrollPane(table));
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
model.setTestValue();
model.fireTableDataChanged();
}
}
Weiß da vielleicht jemand bescheid? Vielen Dank. 😊