Hi,
ich habe folgendes Problem:
Ich habe einen JTable der mit Inhalten einer Datenbank gefüllt wird.
Die Breite der Column soll automatisch an die Breite der breitesten Zelle aus einer Column angepasst werden (zumindest bis zu einer vordefinierten maximalen Breite).
Also nochmal ein Beispiel zur verdeutlichung:
MaxBreite = 200.
In Column A ist die breiteste Zelle 60 breit. Breite wird auf 60 gesetzt.
In Column B ist die breiteste Zelle 220 breit. Breite wird auf 200 gesetzt.
Soweit ist das nicht so schwierig, ich mach das in meinem CellRenderer:
Funktioniert bis jetzt einwandfrei.
Jetzt soll der Benutzer aber natürlich die Möglichkeit haben, eine Spalte schmaler zu machen. D.h. die oben angegebenen Sachen sollen nur einmal nach dem Initialisieren des JTables ausgeführt werden, danach nicht mehr.
Momentan kann ich eine Spalte zwar schmaler ziehen, sie "hüpft" dann aber zurück auf ihre Ausgangsbreite.
Ich hoffe ich habe mich einigermassen verständlich ausgedrückt, bei Unklarheiten bitte einfach nachfragen.
Hat jemand eine Idee wie ich das umsetzen könnte (Table-experte Beni?
)
Danke
ich habe folgendes Problem:
Ich habe einen JTable der mit Inhalten einer Datenbank gefüllt wird.
Die Breite der Column soll automatisch an die Breite der breitesten Zelle aus einer Column angepasst werden (zumindest bis zu einer vordefinierten maximalen Breite).
Also nochmal ein Beispiel zur verdeutlichung:
MaxBreite = 200.
In Column A ist die breiteste Zelle 60 breit. Breite wird auf 60 gesetzt.
In Column B ist die breiteste Zelle 220 breit. Breite wird auf 200 gesetzt.
Soweit ist das nicht so schwierig, ich mach das in meinem CellRenderer:
Code:
class TableRenderer extends JLabel implements TableCellRenderer {
private static final int maxWidth = 200;
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) {
setText(value.toString());
int width = getPreferredSize().width; // breite des labels der aktueller zelle
if (width > maxWidth) width = maxWidth; // falls größer als maxwidth auf maxwidth setzen
if (table.getColumnModel().getColumn(column).getPreferredWidth() < width) { // falls spalte bis jetzt schmaler ist breiter machen
table.getColumnModel().getColumn(column).setPreferredWidth(width);
}
}
// ...
return this;
}
}
Jetzt soll der Benutzer aber natürlich die Möglichkeit haben, eine Spalte schmaler zu machen. D.h. die oben angegebenen Sachen sollen nur einmal nach dem Initialisieren des JTables ausgeführt werden, danach nicht mehr.
Momentan kann ich eine Spalte zwar schmaler ziehen, sie "hüpft" dann aber zurück auf ihre Ausgangsbreite.
Ich hoffe ich habe mich einigermassen verständlich ausgedrückt, bei Unklarheiten bitte einfach nachfragen.
Hat jemand eine Idee wie ich das umsetzen könnte (Table-experte Beni?
Danke