我想知道是否有人可以提供一个JTable的简单示例,它在单元格中显示Icon和String值。有没有人有JTable的示例代码,显示图标和字符串一起在同一列?
我可以构建一个只有Icon或String的列,但不能同时在一个单元格中。
希望任何人都可以给我在这里的......样品,
我的代码连接, 我通常使代码更简单之前我张贴的问题,但不知道如何解决它这一次......原谅我我连接
package jtableWithIcon;
import java.awt.Component;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class Renderer extends DefaultTableCellRenderer{
public void fillColor(JTable t,JLabel l,boolean isSelected){
//setting the background and foreground when JLabel is selected
if(isSelected){
l.setBackground(t.getSelectionBackground());
l.setForeground(t.getSelectionForeground());
}
else{
l.setBackground(t.getBackground());
l.setForeground(t.getForeground());
}
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column){
if(value instanceof JLabel){
ImageIcon imageIcon = new ImageIcon();
JLabel label = (JLabel)value;
//you can add the image here
label.setIcon(new ImageIcon(getClass().getResource("icon.png")));
//*****NullPointException occurs here in thread "AWT-EventQueue-0"....
//*********************************************
label.setOpaque(true);
fillColor(table,label,isSelected);
return label;
}
else {
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
}
package jtableWithIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class MainMyTableTest extends JFrame{
public MainMyTableTest(String title){
super(title);
showGUI();
}
public void showGUI(){
JTable table = new JTable();
table.setModel(new MyModel());//invoking our custom model
table.setDefaultRenderer(JLabel.class, new Renderer());// for the rendering of cell
JScrollPane jp = new JScrollPane(table);
getContentPane().add(jp);
setVisible(true);
setSize(500,300);
}
public static void main(String[] args) {
MainMyTableTest t = new MainMyTableTest("Table Custom");
}
}
package jtableWithIcon;
import javax.swing.JLabel;
class MyModel extends javax.swing.table.DefaultTableModel{
Object[][] row = {{new JLabel("Row 1 Col 1"), "Row 1 Col 2", "Row 1 Col3"},
{new JLabel("Row 2 Col 1"), "Row 2 Col 2", "Row 2 Col3"},
{new JLabel("Row 3 Col 1"), "Row 3 Col 2", "Row 3 Col3"},
{new JLabel("Row 4 Col 1"), "Row 4 Col 2", "Row 4 Col3"}};
Object[] col = {"Column 1", "Column 2", "Column 3"};
public MyModel(){
//Adding columns
for(Object c: col)
this.addColumn(c);
//Adding rows
for(Object[] r: row)
addRow(r);
}
@Override
public Class getColumnClass(int columnIndex) {
if(columnIndex == 0)
return getValueAt(0, columnIndex).getClass();
else
return super.getColumnClass(columnIndex);
}
}
这些代码是从网上捕捉... 我想了解如何通过研究这种渲染作品.. 但在渲染器类中发生错误..
请向我们展示您的最佳[mcve]代码。如果你还没有这样做,你会想要创建自己的JTable单元格渲染器(尽管我会假设你的研究已经在这个方向上引导你)。 –
对不起,我刚才问了一个样本....现在我附上了我正在处理的代码。 –
它看起来像这样:http://stackoverflow.com/a/10785292/1140748 –