Sana olası bir yaklaşım verebilir. Ben masa başvurumu açtı sonraki sefer, uygun sütun genişliklerini yeniden böylece, diske sütun genişlikleri ile ilgili bilgileri seri hale getirmek istedim çünkü aynı sorunu çözmeye çalışıyordum. Buraya:
Adım 1 - JTable geçersiz kıl ve
class MyTable extends JTable {
private boolean isColumnWidthChanged;
public boolean getColumnWidthChanged() {
return isColumnWidthChanged;
}
public void setColumnWidthChanged(boolean widthChanged) {
isColumnWidthChanged = widthChanged;
}
}
Adım 2 buna bir boole özelliği eklemek - (a TableColumnModelListener ekle) masanın
private class TableColumnWidthListener implements TableColumnModelListener
{
@Override
public void columnMarginChanged(ChangeEvent e)
{
/* columnMarginChanged is called continuously as the column width is changed
by dragging. Therefore, execute code below ONLY if we are not already
aware of the column width having changed */
if(!tableObj.hasColumnWidthChanged())
{
/* the condition below will NOT be true if
the column width is being changed by code. */
if(tableObj.getTableHeader.getResizingColumn() != null)
{
// User must have dragged column and changed width
tableObj.setColumnWidthChanged(true);
}
}
}
@Override
public void columnMoved(TableColumnModelEvent e) { }
@Override
public void columnAdded(TableColumnModelEvent e) { }
@Override
public void columnRemoved(TableColumnModelEvent e) { }
@Override
public void columnSelectionChanged(ListSelectionEvent e) { }
}
için Adım 3 - tablo başlığındaki
bir fare dinleyicisi ekleyin
private class TableHeaderMouseListener extends MouseAdapter
{
@Override
public void mouseReleased(MouseEvent e)
{
/* On mouse release, check if column width has changed */
if(tableObj.getColumnWidthChanged())
{
// Do whatever you need to do here
// Reset the flag on the table.
tableObj.setColumnWidthChanged(false);
}
}
}
NOT: Uygulamamda, TableHeaderMouseListener ve TableColumnWidthListener sınıfları, ana uygulama sınıfımın özel iç sınıflarıydı. Ana uygulama sınıfım, gözlemlenen tablonun bir referansına tutuldu. Bu nedenle, bu iç sınıflar tablo örneğine erişime sahipti. Açıkçası, kurulumunuza bağlı olarak, tablo örneğini bu diğer sınıflara sunmak için uygun olan şeyi yapmanız gerekir. Bu yardımcı olur umarım!
Bunu değiştirmediğiniz sürece, kaynak her zaman tablonun 'DefaultChieldColumnModel'idir, 'fireColumnMarginChanged()'. Ne problemi çözmeye çalışıyorsun? – trashgod
yol yok. @ Trashgod'un sorusu tekrarlanıyor: neden? – kleopatra
Sütun boyutunu değiştiren kodunuz varsa, değişiklikten önce dinleyiciyi her zaman devre dışı bırakabilir ya da kaldırabilir, değişikliği yapabilir ve daha sonra tepkisel hale getirebilir ya da dinleyiciyi tekrar ekleyebilirsiniz. – Robin