id предлагает индивидуальный рендеринг ячеек для достижения того, что вы хотите.
public class CellRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (column == /*your column number goes here*/) {
this.setValue(table.getValueAt(row, column));
this.setBackground(Color.RED);
}
return this;
}
}
, прежде чем выбрать цвет, вы можете проверить значение, если его 0 или 1, а затем изменить цвет, если это то, что вы хотите
Как я создал и заполнил/пополнен в JTable с данными база данных:
Таблица:
private void createTable(Container pane) {
Object[] namen = { "Datum", "Kategorie", "Essen", "Preise Intern", "Preise Extern" };
model = new DefaultTableModel(namen, 0);
table = new JTable(model) {
public boolean isCellEditable(int x, int y) {
return false;
}
};
Dimension minimumSize = new Dimension(1000, 500);
table.setPreferredScrollableViewportSize(minimumSize);
TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(model);
table.setRowSorter(sorter);
sorter.setComparator(3, Sorter.getComparator());
sorter.setComparator(4, Sorter.getComparator());
table.getColumnModel().getColumn(3).setCellRenderer(new CellRenderer()); //custom cell renderer
table.getColumnModel().getColumn(4).setCellRenderer(new CellRenderer()); //custom cell renderer
JScrollPane sp = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
}
и как я заполнил его:
void refreshTableContent(Vector<Gericht> v) {
for (int i = table.getRowCount() - 1; i >= 0; i--) {
model.removeRow(i);
}
fillTable(v);
}
void fillTable(Vector<Gericht> v) {
for (int i = 0; i < v.size(); i++) {
Gericht g = v.get(i);
Vector<Object> vhelp = new Vector<>();
vhelp.add(df.format(g.getDate()));
vhelp.add(g.getClassification());
vhelp.add(g.getName());
vhelp.add(g.getPreisIntern());
vhelp.add(g.getPreisExtern());
model.addRow(vhelp);
}
}
model
- DefaultTableModel
, на котором вы добавляете и удаляете данные. при каждом пополнении я сначала удаляю все строки, а затем добавляю их новые. это, вероятно, не лучшее решение, но оно работает
модель - это еда в этом случае, которая имеет несколько полей. поэтому я создал вектор моего собственного объекта, а затем создал вектор помощи и сохранил значения одного приема пищи в нем. затем я добавил вектор как строку в JTable, и следующая еда была сохранена в векторе помощи.
Я надеюсь, что вы можете понять, что я сделал здесь
так что в основном вы хотите, чтобы он был красным все время? – XtremeBaumer
Привет! Вообще говоря, для того, чтобы люди могли правильно ответить на ваш вопрос таким образом, который имеет смысл в контексте вашего приложения, нам нужно увидеть некоторые соответствующие фрагменты кода из вашего кода, в его текущей форме мы не можем действительно рассказать вам о том, как исправить эту проблему, кроме «использовать инструкцию if» или что-то глупое подобное. – zack6849
Итак, вы хотите, чтобы мы искали. Существует хороший учебник о том, как улучшить дизайн JTable. Это может быть хорошим началом, тогда, если это не сработает, вернитесь с некоторым кодом. – AxelH