Wie stelle ich eine JTable-Spaltengröße so ein, dass sie genau (oder genau) zum Inhalt passt?

Die Ausgabe von meinem Programm ist in einemJTextArea in einemJScrollPane. Es sieht böse aus:

Created BinaryTree.java      in     I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\BinaryTree.java
Created DisplayStuff.java        in     I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\DisplayStuff.java
Created LinkedList.java      in     I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\LinkedList.java
Created Node.java        in     I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\Node.java
Created notes        in     I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\notes
Created TryBinaryTree.java       in     I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\TryBinaryTree.java

So dachte ich darüber nach, die Ausgabe in ein @ zu setzJTable, unter der Annahme, dass es einfach ist, die Spaltengröße am Ende der Ausführung anzupassen und Ergebnisse zu erhalten, die eher einer Tabelle ähneln und daher besser lesbar sind:

Ich hatte noch nie benutztJTable vorher, also habe ich ein einfaches Programm ausprobiert, um zu sehen, ob ich ein @ machen könnJTable überhaupt. Ich tat. Hier ist es

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;

public class TestJTable 
{
  static void init()
  {
    fraFrame = new JFrame();
    fraFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        dftTableModel = new DefaultTableModel(0 , 4);
        tblOutput     = new JTable(dftTableModel);
        scrOutput     = new JScrollPane(tblOutput);
        colMdl        =     tblOutput.getColumnModel();

    fraFrame.add(scrOutput); // NOTE: add the SCROLL PANE, not table
    fraFrame.setVisible(true);
    fraFrame.pack();
  }

  public static void main(String[] args) 
  {
    init();
    tblOutput.doLayout();
    dftTableModel.addRow(new Object[]{"Action", "Filename", "", "Path"});
    for (int i = 0; i < 100; i++) 
    {
        String c0 = Utilities.Utilities.repeat("x", (int) (Math.random()*50));
        dftTableModel.addRow(new Object[]{((Math.sin(i)) > 0 ? "Updated" : "Created"), 
                                          c0, "in", c0});
        k = Math.max(k, c0.length());
    }
  }
  static int                  k;
  static JFrame               fraFrame ;
  static JTable               tblOutput; 
  static DefaultTableModel    dftTableModel; 
  static JScrollPane          scrOutput;
  static TableColumnModel     colMdl;
}

Und hier ist die Ausgabe:

Ich möchte in der Lage sein, die Spaltengrößen genau so einzustellen, wie ich es möchte.

Eine Stunde, in der ich meine Räder mit Größen, bevorzugten Größen, Tischgrößen und automatischem Vergrößern (und Nicht-Vergrößern) drehte, führte mich dazu, Folgendes in verschiedenen Kombinationen an verschiedenen Programmteilen zu versuchen, wobei keine zufriedenstellende Ergebnisse lieferte, obwohl ich @ herausnahpack hat etwas geholfen:

    fraFrame.setSize(1400, 600);
    tblOutput.setSize(1500,400);
    colMdl.getColumn(0).setPreferredWidth(15);
    colMdl.getColumn(1).setPreferredWidth(10*k);
    colMdl.getColumn(2).setPreferredWidth(5);
    colMdl.getColumn(3).setPreferredWidth(10*k);

So ist es, dass ich fragen muss:

(a) Genauer gesagt, vorausgesetzt, ich weiß, dassk ist die Anzahl der Zeichen imFilename und 'Pfadcolumns, how can I make the contents of those columns be exactly fit their columns? (I assume font` size wird das Bild eingeben.)

(b) Wie ändere ich im Allgemeinen die Spaltengröße in einemJTable? Beispielsweise wird eine Spalte immer "in" sagen. Wie kann man die Spalte nicht breiter machen?

BEARBEITE

Danke an @camickr, es war EINFACH, die gewünschte Ausgabe zu erhalten, sowohl im obigen Testprogramm als auch in der realen Ausgabe:

Antworten auf die Frage(2)

Ihre Antwort auf die Frage