У меня есть 5 JTables в разных формах с произвольным количеством строк, и я хотел бы иметь метку для каждой из них, которая будет показывать мне общее количество строк в этой таблице, а также менять цвет на 3 секунды при изменении количества строк. Цвет должен стать зеленым при увеличении и красным при уменьшении. Как лучше всего реализовать это, чтобы мне не нужно было дублировать слишком много кода в каждой из моих форм?
Итоги строки JTable с цветовой кодировкой
comment
Если JTable одинаковы, вы можете расширить JTable и переопределить методы, необходимые для придания ему дополнительной функциональности.
- person The Cat   schedule 28.08.2012
comment
@TheCat нет, вы никогда (в приближении, очень близком к 100%) переопределяете какой-либо JSomething. Кроме того, сама таблица не имеет ничего общего с требованием.
- person kleopatra   schedule 28.08.2012
Ответы (1)
в основном вы добавляете TableModelListener в модель JTable и при получении событий изменения обновляете соответствующие метки по мере необходимости.
некоторый код:
public class TableModelRowStorage
// extends AbstractBean // this is a bean convenience lass of several binding frameworks
// but simple to implement directly
implements TableModelListener {
private int rowCount;
public TableModelRowStorage(TableModel model) {
model.addTableModelListener(this);
this.rowCount = model.getRowCount();
}
@Override
public void tableChanged(TableModelEvent e) {
if (((TableModel) e.getSource()).getRowCount() != rowCount) {
int old = rowCount;
rowCount = ((TableModel) e.getSource()).getRowCount();
doStuff(old, rowCount);
}
}
protected void doStuff(int oldRowCount, int newRowCount) {
// here goes what you want to do - all in pseudo-code
// either directly configuring a label/start timer
label.setText("RowCount: " + newRowCount);
label.setForeground(newRowCount - oldRowCount > 0 ? Color.GREEN : Color.RED);
timer.start();
// or indirectly by firing a propertyChange
firePropertyChange("rowCount", oldRowCount, newRowCount);
}
}
person
kleopatra
schedule
28.08.2012
AbstractBean
— это класс SwingX. Возможно, вам следует переписать этот фрагмент кода, используя PropertyChangeSupport
, хотя цель кода ясна.
- person Robin; 28.08.2012
@ Робин .. это наполовину псевдокод .. намеренно. Виноват, что не упомянул об этом :)
- person kleopatra; 29.08.2012