0
我正在開發一個帶有swing的java(jdk 1.6)桌面應用程序,但在刷新視圖後出現問題。每當我更新JTable的模型時,我都會發現這個模型中的數據會發生變化,但是視圖中會出現問題。如何刷新JTable模型而不覆蓋視圖中的舊模型?
它只用新數據覆蓋單元格中的舊數據,並模糊單元格中的數據,就好像它將一個數據圖像置於其他數據上一樣。當我雙擊單元格時,我可以讀取新的數據。 (不能不幸張貼圖片)
我試圖
- 設置數據模型首先爲空,調用重繪(),然後加載新的模型和重繪()
- 調用fireTableDataChanged()
- 搜索
毫無效果類似的問題和疑問。我有很多像這樣的桌子,但只有這張桌子有這樣的問題。
要更新底層數據模型:
void loadTask(Task t) {
(....)
TaskPropertiesModel = new DefaultTableModel();
Object[][] data = new Object[][]
{
{"Start :", t.getStart()},
{"End :", t.getEnd()},
{"Freq. :", t.getFrequency()},
{"Roles :", roles},
{"Hard :", t.getHard()},
{"Values:", values}
};
TaskPropertiesModel.setDataVector(data, new Object[2]); //no column is shown
}
表屬性:
TaskPropertiesTable.setMaximumSize(new java.awt.Dimension(150, 90));
TaskPropertiesTable.setMinimumSize(new java.awt.Dimension(150, 90));
TaskPropertiesTable.setRowSelectionAllowed(false);
TaskPropertiesTable.getTableHeader().setResizingAllowed(false);
TaskPropertiesTable.getTableHeader().setReorderingAllowed(false);
TaskPropertiesTable.setTableHeader(null);
TaskPropertiesTable.setPreferredScrollableViewportSize(TaskPropertiesTable.getPreferredSize());
TaskPropertiesTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [6][2],new String [2]));
TaskPropertiesTable.setDefaultRenderer(Object.class, new MultiLineCellRenderer());
MultiLineCellRenderer:
public class MultiLineCellRenderer extends JTextArea implements TableCellRenderer {
public MultiLineCellRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(Color.BLACK);
setBackground(Color.LIGHT_GRAY);
}
else {
setForeground(Color.BLACK);
setBackground(Color.WHITE);
}
setFont(table.getFont());
if (hasFocus) {
setBorder(new FocusBorder(Color.RED, Color.RED));
if (table.isCellEditable(row, column)) {
setForeground(Color.BLACK);
setBackground(Color.LIGHT_GRAY);
}
} else {
setBorder(new BevelBorder(1)); // This was emptyBorder.
//after changing it, the problem is solved
}
if (!table.isCellEditable(row, column)) {
setForeground(Color.BLACK);
setBackground(Color.LIGHT_GRAY);
}
setText((value == null) ? "" : value.toString());
//---setting the row height--//
}
預先感謝
ISIL
請學習java命名約定,並堅持不懈 – kleopatra
沒有什麼你嘗試過(除了做研究 - 永遠不會傷害:-)是永遠需要的。相反,你所做的代碼出現了問題_not_ show,sscce的時間 – kleopatra
「神奇地」,當我設置單元格邊界時,問題就解決了。 (從EmptyBorder更改爲BevelBorder)還有另一個關於滾動的(類似的)問題。當我在這張桌子上滾動時,單元格上的數據也受到影響,文字模糊。設置邊框後也解決了這個問題。任何意見? – isilpekel