- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 JTable 列上设置 JProgressbar 单元格渲染器。问题是,我的表格单元格上不会显示任何进度条,它只显示进度值。
这是我的 TableModel:
public class DownloadTableModel extends AbstractTableModel {
private String[] columnNames = { "Song", "Artist", "Album", "Progress", "Size", "Path", "Date" };
private List<Track> songDownloads = new ArrayList<Track>();
public DownloadTableModel() {
}
public DownloadTableModel(List<Song> songs) {
for (Song song : songs) {
Track track = Services.getDownloadService().download(song);
songDownloads.add(track);
fireTableDataChanged();
}
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return songDownloads == null ? 0 : songDownloads.size();
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int rowIndex, int columnIndex) {
Track songDownload = songDownloads.get(rowIndex);
switch (columnIndex) {
case 0: return songDownload.getSong().getName();
case 1: return songDownload.getSong().getArtist().getName();
case 2: return songDownload.getSong().getAlbum().getName();
case 3: return songDownload.getProgress();
case 4: return songDownload.getSize();
case 5: return songDownload.getPath();
case 6: return songDownload.getDate();
}
return null;
}
public void setValueAt(Object obj, Track songDownload, int col) {
int index = songDownloads.indexOf(songDownload);
setValueAt(obj, col, index);
fireTableCellUpdated(index, col);
updateSongDownloads();
}
@Override
public Class<?> getColumnClass(int column) {
if(songDownloads.size() > 0 && getRowCount() > 0) {
return getValueAt(0, column).getClass();
} else {
switch (column) {
case 0: return String.class;
case 1: return String.class;
case 2: return String.class;
case 3: return Integer.class;
case 4: return String.class;
case 5: return String.class;
case 6: return String.class;
default: return Object.class;
}
}
}
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
public List<Track> getSongDownloads() {
return songDownloads;
}
public void setSongDownloads(List<Track> songDownloads) {
this.songDownloads = songDownloads;
fireTableStructureChanged();
updateSongDownloads();
}
public Track getSongDownload(Song song) {
for(Track songDownload : songDownloads) {
if(songDownload.getSong().equals(song)) {
return songDownload;
}
}
return null;
}
public int getSongDownloadIndex(Song song) {
for(Track songDownload : songDownloads) {
if(songDownload.getSong().equals(song)) {
return songDownloads.indexOf(songDownload);
}
}
return -1;
}
public void removeRow(int row) {
songDownloads.remove(row);
fireTableDataChanged();
updateSongDownloads();
}
public void removeRow(Track songDownload) {
songDownloads.remove(songDownload);
fireTableDataChanged();
updateSongDownloads();
}
public void addRow(Track songDownload) {
songDownloads.add(songDownload);
fireTableDataChanged();
updateSongDownloads();
}
public void addRow(int row, Track songDownload) {
songDownloads.add(row, songDownload);
fireTableDataChanged();
updateSongDownloads();
}
public void updateSongDownloads() {
Main.getConfig().setDownloads(songDownloads);
}
public void fireTableCellUpdated(Song song, int col) {
fireTableCellUpdated(getSongDownloadIndex(song), col);
}
}
然后是 JTable:
downloadTable = new javax.swing.JTable();
downloadTable.setModel(new groovesquid.gui.DownloadTableModel());
downloadTable.getColumn("Progress").setCellRenderer(new ProgressCellRenderer());
downloadTable.setAutoCreateRowSorter(true);
downloadTable.setFocusable(false);
downloadTable.setGridColor(new java.awt.Color(204, 204, 204));
downloadTable.setRequestFocusEnabled(false);
downloadTable.setRowHeight(20);
downloadTable.getTableHeader().setReorderingAllowed(false);
jScrollPane2.setViewportView(downloadTable);
还有我的 TableCellRenderer:
public class ProgressCellRenderer extends JProgressBar implements TableCellRenderer {
ProgressCellRenderer() {
super(0, 100);
setValue(0);
setString("initializing...");
setStringPainted(true);
}
@Override
public boolean isDisplayable() {
// This does the trick. It makes sure animation is always performed
return true;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
String text = "";
Color foregroundColor = Color.BLACK;
this.setForeground(foregroundColor);
this.setValue((Integer)value);
this.setString(text);
return this;
}
}
最佳答案
明白了,问题是,我在设置表数据时使用的是 fireTableStructureChanged
而不是 fireTableDataChanged
。
关于java - 进度条 TableCellRenderer 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17885146/
我有 2 列的 jTable1。我想控制第 1 列的外观,因此我使用以下代码根据单元格行是偶数还是奇数来将单元格中的文本字体设置为粗体或不粗体。 import java.awt.Component;
我能找到的所有自定义示例 TableCellRenderer似乎都在扩展DefaultTableCellRenderer .我想这没什么不妥,除了您无法扩展当前外观的 TableCellRendere
我想实现一个 JTable 组件的 tablecellrenderer,它应该根据单元格数据显示不同的颜色。我明白了,但我无法更改所选单元格的颜色。我试着这样做: public Component g
我有一个包含四列的 JTable。我正在尝试将其中一列的标题居中对齐。我得到了一个半工作的解决方案,但问题是标题的默认呈现/样式似乎丢失了。见截图。我想获取当前的 TableCellRenderer,
我有一个绑定(bind)到 JTable 的 ArrayList。之后 bindingGroup.unbind(); bindingGroup.bind(); (完成刷新数据)我丢失了表格单元格渲
我正在尝试能够为 JTable 中的单独单元格着色,但到目前为止我只能在整个列上应用 TableCellRenderer,这显然会出现故障。我有一个自定义 JTable: public class J
简单的问题,但我似乎无法在网上找到答案。 如何使用自定义 TableCellRenderer 以粗体显示某些表格单元格? 我知道如何使用 TableCellRenderer 逐个单元格设置背景颜色。你
我正在尝试在 JTable 列上设置 JProgressbar 单元格渲染器。问题是,我的表格单元格上不会显示任何进度条,它只显示进度值。 这是我的 TableModel: public class
我正在尝试使用此教程代码将按钮添加到 JTable 的最后一列: http://www.java2s.com/Code/Java/Swing-Components/ButtonTableExample
尝试将 tablecellrenderer 应用于列。我需要三个不同的图标,分别用于文件夹、zip\rar 文件等。 我该如何设置它们? If 子句(if f.isDirectory()) 根本不起作
大家好,我的程序中遇到以下问题。我有几个按列应用的 tablecellrenderer。问题是,如果某列在我的表中出现两次,则单元渲染器将无法工作,并且两列均未格式化。我也无法更改列名称,因为我的客户
我试图进行检查,如果单元格 3 的值不为空,则整行将被着色为绿色,但是这不会执行任何操作,但是,如果我不进行检查,则仅检查以确保没有任何内容已选择(以便选择会给出颜色以表明您确实选择了)所有内容都绘制
给定一个javax.swing.table.TableColumn...是否可以通过某种方式指定用于给定类型的TableCellRenderer/TableCellEditor,而不是让TableCo
我有一个包含三列字符串的表。我希望最后一列具有绿色背景和粗体字体。所以我想我需要一个自定义的 TableCellRenderer。但是,当我调用 table.setDefaultRenderer 时,
我有一个扩展 DefaultTableCellRenderer 的类,它以等宽字体呈现具有特定颜色的字符串。默认情况下,似乎根本不呈现选项卡(0 个空格)。如何设置选项卡大小和/或使它们呈现? 编辑:
我尝试学习 JTables TableCellRenderer,但有些东西我不明白。也许你们中的一个可以帮助我。 请看一下我在网上找到的这个例子: http://www.java2s.com/Tuto
我使用自定义的 DefaultTableCellRenderer 创建了一个简单的 JTable。它本身工作正常(最后一列着色)。但是,一旦我选择一行或过滤/取消过滤它,该行就会被着色,即使它根本不应
我正在尝试在 jtable 上实现自定义 TableCellRenderer。该表设置为 100 行和 100 列。该表应包含指定字体的所有字形。我的问题是,当表中的值不完整时,它会在第一列中放置最后
我正在实现 TableCellRenderer 以在最后一个值是否为特定值时做出明显的区别。 所以,这些实现的代码是: TableColumnModel tcm = table.getColu
我有一个 JTable,我希望能够更改单击的单个单元格的颜色。 这是我的代码的简化版本: public class TableFrame extends JFrame { public Tab
我是一名优秀的程序员,十分优秀!