У меня есть классный человек, с атрибутом Boolean Isdead .
Я хочу отобразить список или человека s в jtable . Каждая строка в jtable представляет одного человека .
Я хочу отобразить имя человека в другом цвете, если человек мертв. Поэтому мне нужно подключить текущую строку к соответствующему человеку объекта .
Используя приведенный ниже код, мне нужно передать TableModel в TableCellRenderer , чтобы эта работа: PersonTableCellRenderer CTOR принимает PersonTableModel для поиска лица линии CODE (CODE более поздно (CODE> CODE)final Person person = mModel.getItemInRow(modelIndex);).
Есть ли какой -нибудь более чистый способ сделать это?package stackoverflow;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.util.ArrayList;
import java.util.function.Function;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableModel;
public class ItemBasedTableCellRenderer extends JFrame {
private static final long serialVersionUID = 1538589452450196943L;
public static void main(final String... args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new ItemBasedTableCellRenderer().setVisible(true);
}
/* Library class. Uses a observable list, but this would be too much code to embed here, so we'll ignore the update/repaint stuff here */
public abstract class JcTableModel implements TableModel {
protected final ArrayList mListeners = new ArrayList();
protected final ArrayList mColumns = new ArrayList();
protected final ArrayList mItems = new ArrayList(); // this would be observable and triggering TableModelEvents IRL
public JcJTableColumnWrapper addColumn(final String pTitle, final Function pGetValueLambda, final Class pColType) {
final JcJTableColumnWrapper wrapper = new JcJTableColumnWrapper(pTitle, pGetValueLambda, pColType);
mColumns.add(wrapper);
return wrapper;
}
public ArrayList getBackingList() {
return mItems;
}
@Override public int getColumnCount() {
return mColumns.size();
}
@Override public int getRowCount() {
return getBackingList().size();
}
@Override public String getColumnName(final int pColumn) {
return mColumns.get(pColumn).mTitle;
}
@Override public Class getColumnClass(final int pColumnIndex) {
return mColumns.get(pColumnIndex).mColType;
}
@Override public Object getValueAt(final int pRow, final int pColumn) {
final T item = getBackingList().get(pRow);
return mColumns.get(pColumn).getValue(item);
}
@Override public void setValueAt(final Object pArg0, final int pArg1, final int pArg2) { /* */}
@Override public boolean isCellEditable(final int pRow, final int pColumn) {
return false;
}
@Override public void addTableModelListener(final TableModelListener pArg0) {
mListeners.add(pArg0);
}
@Override public void removeTableModelListener(final TableModelListener pArg0) {
mListeners.remove(pArg0);
}
public T getItemInRow(final int pRowIndex) {
if (pRowIndex < 0 || mItems.size()
Подробнее здесь: https://stackoverflow.com/questions/797 ... r-property
Jtable Custom CellRenderer: отображение ячейки в цвете в зависимости от другого свойства текущего элемента ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение