Интересно, может ли кто-нибудь предложить простой пример JTable, который показывает значение Icon и String вместе в ячейке.Есть ли у кого-нибудь образец кода JTable, который показывает Icon и String вместе в одном столбце?
Я могу построить JTable со столбцом либо только с помощью значка или строки, но не в обеих ячейках вместе.
Надежда кто-нибудь может дать мне образец здесь ...
прикрепляются Мои коды, я обычно делают код более простым, прежде чем я отправляю вопрос, но не знаю, как исправить это на этот раз ... прости меня что я прикрепил
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);
}
}
Эти коды захватываются из Интернета ... Я пытаюсь понять, как Рендер работы по изучению этого .. но возникает ошибка в классе Renderer ..
Пожалуйста, покажите нам ваш лучший [mcve] код. Если вы еще этого не сделали, вы захотите изучить свой собственный рендеринг ячеек JTable (хотя я бы предположил, что ваши исследования уже привели вас в этом направлении). –
жаль, что я просто попросил образец ... теперь я прикрепил коды, над которыми я работал. –
Он выглядит следующим образом: http://stackoverflow.com/a/10785292/1140748 –