Jtable Custom CellRenderer: отображение ячейки в цвете в зависимости от другого свойства текущего элементаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Jtable Custom CellRenderer: отображение ячейки в цвете в зависимости от другого свойства текущего элемента

Сообщение Anonymous »

У меня есть классный человек, с атрибутом 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»