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: