- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试将 tablecellrenderer
应用于列。我需要三个不同的图标,分别用于文件夹、zip\rar 文件等。
我该如何设置它们?
If 子句(if f.isDirectory())
根本不起作用。
public class FirstCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
File f = (File) value;
ImageIcon folderIcon = new ImageIcon(getClass().getResource("/images/folder.png"));
ImageIcon archiveIcon = new ImageIcon(getClass().getResource("/images/archive.png"));
if (!isSelected) {
label.setBackground(row % 2 == 0 ? Color.LIGHT_GRAY : Color.WHITE);
}
label.setIcon(f.isDirectory() ? folderIcon : archiveIcon);
label.setText(f.getName());
return label;
}
}
最佳答案
可能有多种原因导致您没有得到预期的结果,但您为我们诊断问题提供的信息太少,因此这一切都只是猜测。
您可能-忘记向表注册渲染器,或者使用错误的类型或列注册它
您可能-没有将图像放在正确的位置
您可能-您的文件列表中没有目录。
下面是一个简单的示例,它演示了渲染器的核心概念正在工作,肯定还缺少其他东西......
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class TestTable100 {
public static void main(String[] args) {
new TestTable100();
}
public TestTable100() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Files");
for (File file : new File(System.getProperty("user.home")).listFiles()) {
model.addRow(new Object[]{file});
}
JTable table = new JTable(model);
table.getColumnModel().getColumn(0).setCellRenderer(new FirstCellRenderer());
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class FirstCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
File f = (File) value;
// ImageIcon folderIcon = new ImageIcon(getClass().getResource(
// "/images/folder.png"));
// ImageIcon archiveIcon = new ImageIcon(getClass().getResource(
// "/images/archive.png"));
if (!isSelected) {
label.setBackground(row % 2 == 0 ? Color.LIGHT_GRAY : Color.WHITE);
}
// label.setIcon(f.isDirectory() ? folderIcon : archiveIcon);
String prefix = f.isDirectory() ? "[d]" : "[f]";
label.setText(prefix + " " + f.getName());
return label;
}
}
}
更新为以不同方式显示 Zip 文件
请注意,File
API 不能很好地处理某些“特殊”文件,例如符号链接(symbolic link)或 Windows 等效文件(我看着你,我的音乐)
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class TestTable100 {
public static void main(String[] args) {
new TestTable100();
}
public TestTable100() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Files");
for (File file : new File(System.getProperty("user.home")).listFiles()) {
model.addRow(new Object[]{file});
}
JTable table = new JTable(model);
table.getColumnModel().getColumn(0).setCellRenderer(new FirstCellRenderer());
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public static class FirstCellRenderer extends DefaultTableCellRenderer {
protected static ImageIcon FOLDER_ICON;
protected static ImageIcon FILE_ICON;
protected static ImageIcon ZIP_FILE_ICON;
static {
try {
FOLDER_ICON = new ImageIcon(ImageIO.read(FirstCellRenderer.class.getResource("/Folder.png")));
} catch (IOException exp) {
FOLDER_ICON = null;
exp.printStackTrace();
}
try {
FILE_ICON = new ImageIcon(ImageIO.read(FirstCellRenderer.class.getResource("/File.png")));
} catch (IOException exp) {
FILE_ICON = null;
exp.printStackTrace();
}
try {
ZIP_FILE_ICON = new ImageIcon(ImageIO.read(FirstCellRenderer.class.getResource("/ZipFile.png")));
} catch (IOException exp) {
ZIP_FILE_ICON = null;
exp.printStackTrace();
}
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
File f = (File) value;
setIcon(null);
if (f.isDirectory()) {
setIcon(FOLDER_ICON);
} else {
String name = f.getName();
if (name.toLowerCase().endsWith(".zip")) {
setIcon(ZIP_FILE_ICON);
} else {
setIcon(FILE_ICON);
}
}
setText(f.getName());
return this;
}
}
}
关于java - 将 Tablecellrenderer 应用于列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22584237/
我有 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
我是一名优秀的程序员,十分优秀!