JTable

Von: , Frage gestellt am Fr, 16. Apr 2004

Hallo!

ich habe ein Problem mit einer JTable.
Ich möchte das die Spalten immer mindestens so breit sind wie der breitestes Spalteneintrag, wenn mehr Platz ist die Spalten an die Fenstergrösse angepasst werden, wenn der Platz zu klein ist ein Scrollbalken eingeblendet wird.
Ich bekomme es hin das die Spalten immer mindestens so breit sind und sich an die Fenstergrösse anpassen; sobald ich die Tabelle allerdings in ein ScrollPane lege ist die Spaltenbreite viel zu breit. Auch die Idee die Tabelle in ein extra Pane und das dann wiederrum in ein ScrollPane zu legen hat nichts gebracht. Kann mir jemand einen Tip geben wie ich das Problem lösen kann?

Lieben Gruß,
Monchichi

5 Antworten zu dieser Frage

  1. Antwort von nach 22 Stunden 0 hilfreich
    Re: JTable

    public void packColumn(JTable table, int vColIndex, int margin) {
    TableModel model = table.getModel();
    DefaultTableColumnModel colModel = (DefaultTableColumnModel)table.getColumnModel();
    TableColumn col = colModel.getColumn(vColIndex);
    int width = 0;

    // Get width of column header
    TableCellRenderer renderer = col.getHeaderRenderer();
    if (renderer == null) {
    renderer = table.getTableHeader().getDefaultRenderer();
    }
    Component comp = renderer.getTableCellRendererComponent(
    table, col.getHeaderValue(), false, false, 0, 0);
    width = comp.getPreferredSize().width;

    // Get maximum width of column data
    for (int r=0; r<table.getRowCount(); r++) {
    renderer = table.getCellRenderer(r, vColIndex);
    comp = renderer.getTableCellRendererComponent(
    table, table.getValueAt(r, vColIndex), false, false, r, vColIndex);
    width = Math.max(width, comp.getPreferredSize().width);
    }

    // Add margin
    width += 2*margin;

    // Set the width
    col.setPreferredWidth(width);
    } [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

    • Antwort von nach 4 Tagen 0 hilfreich
      Re^2: JTable

      Hallo!

      vielen Dank für die Hilfe, aber mein Problem ist noch immer das gleiche. Sobald ich meine Tabelle in ein Scrollpane lege sind die Spalten nicht mehr so breit wie Sie mindestens sein müssen sondern sie sind viel breiter. Dies wird leider sehr unübersichtlich, weswegen ich weiterhin nach einer anderen Lösung suche. Falls noch jemand eine Idee hat bin ich sehr froh darüber...

      Lieben Gruß,
      Monchichi

      • Antwort von nach 4 Tagen 0 hilfreich
        Re^3: JTable

        Hallo,

        dann hast Du die automatische Spaltenbreite an (Standard)

        Wenn Du eine JTable erzeugst, so hat sie erst mal alle Spalten über die verfügbare Fläche verteilt. Es gibt eine Methode, um dieses Verhalten anzupassen:

        tab.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

        sollte helfen.

        Gruß

        Peter

        • Antwort von nach 6 Tagen 0 hilfreich
          Re^4: JTable

          Hallo!

          jup, jetzt klappt es, vielen vielen Dank! Das einzigste was noch nicht so ist wie ich möchte ist, dass wenn mehr Platz ist die Spalten auch breiter werden. Ich gehe davon aus das es daran liegt, das die PreferredWidth gesetzt wird. Gibt es hier auch noch eine Möglichkeit das zu Ändern?

          Viele Grüsse,
          Monchichi [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

          • Antwort von nach 6 Tagen 0 hilfreich
            Re^5: JTable

            na, dazu müsstest du halt die packColumns entsprechend modifizieren.
            Zuerst den freien Raum ermitteln, dann die packColumns laufen lassen und danach den zweiten Parameter anpassen (Den Abstand von Text zu Spaltenende) oder einfach die letzte Spalte so groß machen, dass der Platz aufgebraucht wird.

            Gruß

            Peter

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!