Ich frage mich, ob jemand ein einfaches Beispiel für JTable anbieten kann, das Icon und String-Wert zusammen in einer Zelle zeigt.Hat jemand Beispielcode von JTable, der Icon und String zusammen in einer Spalte zeigt?
Ich kann eine JTable mit Spalte entweder nur mit Icon oder String, aber nicht beide in einer Zelle zusammen bauen.
Hoffnung jemand mir eine Probe hier geben kann ...
Meine Codes gebunden sind, ich in der Regel Code einfacher machen, bevor ich Frage posten, aber nicht wissen, wie es dieses Mal beheben ... verzeih mir daß ich angebracht
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);
}
}
Diese Codes werden von Internet erfaßt ... Ich versuche Werke zu verstehen, wie Render dies durch das Studium .. aber ein Fehler tritt bei der Klasse Renderer ..
Bitte zeigen Sie uns Ihren besten [mcve] Code. Wenn Sie dies noch nicht getan haben, sollten Sie sich die Erstellung eines eigenen JTable-Zellen-Renderers ansehen (obwohl ich annehmen würde, dass Ihre Forschung Sie bereits in diese Richtung geführt hätte). –
Entschuldigung, dass ich gerade eine Probe gefragt habe .... jetzt habe ich die Codes angehängt, an denen ich gearbeitet habe. –
Es sieht so aus: http://stackoverflow.com/a/10785292/1140748 –