Ich erstelle eine GUI-Schnittstelle, um mit der Datenbank eines Warehouse zu interagieren. Die Anwendung muss Objekte zur Datenbank hinzufügen, sie aktualisieren und anzeigen. Ich habe einige Tabellen in der Datenbank und für jede Tabelle möchte ich eine JPanel erstellen und sie in ein Cardlayout legen, damit ich mit JMenu-Elementen zwischen ihnen navigieren kann. Jedes JPanel hat die gleiche Form. Oben befindet sich eine Box mit Textfeldern, Comboboxen usw., um ein Objekt in die Tabelle einzufügen. Unter der Box habe ich eine JTable mit 1 Zeile und darunter eine JTable in einer JScrollPane, um den Inhalt der Tabelle anzuzeigen. Jede Spalte muss eine Breite von 150 haben, mit Ausnahme der letzten (Breite = 100, enthält sie eine JButton für Änderungen). Ich benutze die erste JTable als Filter (wenn die erste Spalte beispielsweise "1" enthält, zeigt die zweite JTable nur Elemente mit einer ID beginnend mit "1" an). Ich weiß nicht, wie ich die richtigen Layouts für verschiedene JPanels auswählen soll. Momentan hat jedes JPanel ein BorderLayout und jede Komponente ist in der Mitte platziert. Aber das Problem ist, dass ich nicht die Breite jeder Spalte wählen kann.JTable width layout
0
A
Antwort
0
Nun, endlich habe ich mein eigenes Problem gelöst. Eigentlich muss ich die JTable in eine JPanel und die JPanel in eine JScrollPane legen. Hier ist der Code:
public class Brouillon extends JFrame {
public Brouillon() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jpContent = new JPanel();
JPanel jpCards = new JPanel();
jpContent.setLayout(new BoxLayout(jpContent, BoxLayout.PAGE_AXIS));
CardLayout clSelect = new CardLayout();
jpCards.setLayout(clSelect);
JButton jbTest = new JButton();
jbTest.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clSelect.next(jpCards);
}
});
jpContent.add(jbTest);
JPanel jpContainer1 = new JPanel();
JTable jtData1 = new JTable(new Object[2][3], new String[] {"1", "2", "3"});
jtData1.getColumnModel().getColumn(0).setPreferredWidth(150);
jtData1.getColumnModel().getColumn(1).setPreferredWidth(150);
jtData1.getColumnModel().getColumn(2).setPreferredWidth(50);
JPanel jpTemp1 = new JPanel();
jpTemp1.setLayout(new BorderLayout());
jpTemp1.add(jtData1.getTableHeader(), BorderLayout.NORTH);
jpTemp1.add(jtData1, BorderLayout.CENTER);
JScrollPane jspData1 = new JScrollPane(jpTemp1);
jpContainer1.add(jspData1);
JPanel jpContainer2 = new JPanel();
JTable jtData2 = new JTable(new Object[2][7], new String[] {"1", "2", "3", "4", "5", "6", "7"});
jtData2.getColumnModel().getColumn(0).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(1).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(2).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(3).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(4).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(5).setPreferredWidth(150);
jtData2.getColumnModel().getColumn(6).setPreferredWidth(50);
JPanel jpTemp2 = new JPanel();
jpTemp2.setLayout(new BorderLayout());
jpTemp2.add(jtData2, BorderLayout.CENTER);
jpTemp2.add(jtData2.getTableHeader(), BorderLayout.NORTH);
JScrollPane jspData2 = new JScrollPane(jpTemp2);
jpContainer2.add(jspData2);
jpCards.add(jpContainer2);
jpCards.add(jpContainer1);
jpContent.add(jpCards);
this.getContentPane().add(jpContent);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
new Brouillon();
}
}
0
Für jTable können Sie die Spaltengröße festlegen. Möglicherweise hilft das folgende Beispiel. Bitte lassen Sie mich wissen, wenn dies das ist, was Sie suchen!
TableColumn column = null;
for (int i = 0; i < 3; i++) {
column = table.getColumnModel().getColumn(i);
if (i == 2) {
column.setPreferredWidth(100); //sport column is bigger
} else {
column.setPreferredWidth(50);
}
}
Ich habe auch das, aber wenn ich die Tabelle in einem Bildlauffenster setzen, ist es nicht wirksam, und wenn ich es in der Mitte eines Border setzen, dauert es alle der Platz im Jframe. – ardayigit
Kannst du bitte diesen Beitrag lesen? http://stackoverflow.com/questions/953972/java-jtable-setting-column-width – Sirsendu
Es löst nicht mein Problem ... – ardayigit