Hallo!
Folgende Ausgangslage:
Ich habe ein Frame (GridBagLayout) welches 2 Panel (die wieder GridBagLayout sind) beinhaltet.
Das obere der beiden Frames definiert eine Suchmaske und beeinhaltet JTextFields und darüber als Beschriftung JLabels. Hier ist es möglich Suchkriterien für eine Ausgabe in einem Table einzugeben.
Das untere der beiden Frames zeigt einen JTabel wlecher sich in einer JScrollPane befindet. Hier werden dann aus einer Sammlung von Daten, die den Suchkriterien entsprechenden Daten, ausgegeben.
Über jeder Spalte des JTables soll das dazugehörige JTextField (zum suchen in der jeweiligen Spalte) platziert werden.
So jetzt mein Problem:
Ich hätte gerne dass die JTextFields (und die darüber befindlichen JLabels) genau über der jeweiligen Spalte der Tabelle ausgerichtet werden. Außerdem soll jedes JTextField natürlich die selbe Länge wie die dazugehörige Spalte haben.
Mein JTable hat bereits fix definierte Spalten Breiten
(wurde folgendermaßen definiert: columnWidths -> "WWWWWW";"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW";"WWWWWWWWWWWWWWWWWWWWWWW";"WWWWWWW";"WWWWWWWW";"WW";"WWWWWWWWWW";"WWWWWWWWWWWWWWWW")
Damit sich die JTextFields jedes mal beim erzeugen des Fensters positionieren und ihre Größe definieren habe ich folgende Methode geschrieben:
Die Methode geht in einer for Schleife alle Spalten durch und ließt pro Spalte die PreferredWidth aus. Danach wird im nächsten Schritt die PreferredSize des JTexField bzw. JLabel mit diesem Wert gesetzt.
Somit sollte eigentlich jedes TextField und das darüberliegende Label gleich groß wie seine zugehörige Spalte (die direkt darunter liegen sollte) sein. -> Ergebnis: ist aber nich so! Meine TextFields bekommen einfach irgendeine Größe.
Weitere Infos:
Die Maximum und minumum Size der TextFields habe ich bereits auf extrem hohen bzw. niedirgen Wert gesetzt.
Ich hoffe irgendjemand kann mir helfen denn ich bin schon ziemlich am Verzweifeln! Finde das Problem einfach nicht, eigentlich sollte die Methode in der ich die Preferred Size setzte ja auch die Arbeit wie gewünscht verrichten?!
Folgende Ausgangslage:
Ich habe ein Frame (GridBagLayout) welches 2 Panel (die wieder GridBagLayout sind) beinhaltet.
Das obere der beiden Frames definiert eine Suchmaske und beeinhaltet JTextFields und darüber als Beschriftung JLabels. Hier ist es möglich Suchkriterien für eine Ausgabe in einem Table einzugeben.
Das untere der beiden Frames zeigt einen JTabel wlecher sich in einer JScrollPane befindet. Hier werden dann aus einer Sammlung von Daten, die den Suchkriterien entsprechenden Daten, ausgegeben.
Über jeder Spalte des JTables soll das dazugehörige JTextField (zum suchen in der jeweiligen Spalte) platziert werden.
So jetzt mein Problem:
Ich hätte gerne dass die JTextFields (und die darüber befindlichen JLabels) genau über der jeweiligen Spalte der Tabelle ausgerichtet werden. Außerdem soll jedes JTextField natürlich die selbe Länge wie die dazugehörige Spalte haben.
Mein JTable hat bereits fix definierte Spalten Breiten
(wurde folgendermaßen definiert: columnWidths -> "WWWWWW";"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW";"WWWWWWWWWWWWWWWWWWWWWWW";"WWWWWWW";"WWWWWWWW";"WW";"WWWWWWWWWW";"WWWWWWWWWWWWWWWW")
Damit sich die JTextFields jedes mal beim erzeugen des Fensters positionieren und ihre Größe definieren habe ich folgende Methode geschrieben:
Code:
//--- set search fields' sizes according to corresponding table column sizes--- BEGIN ---
java.awt.Component[] componentsRow1 = {null, cbProductRole, null, null, null, null, null, null};
java.awt.Component[] componentsRow2 = {tfNumber, tfCustomer, tfName, cbStatus, tfCommunity, tfFederalState, tfCountry, cbTemplate};
for (int i=0; i<productTable.getTableHeader().getColumnModel().getColumnCount(); i++) {
int newWidth = productTable.getTableHeader().getColumnModel().getColumn(i).getPreferredWidth();
if (componentsRow1[i] != null)
{
componentsRow1[i].setPreferredSize(new java.awt.Dimension(newWidth, (int)componentsRow1[i].getPreferredSize().getHeight()));
componentsRow1[i].setMinimumSize(new java.awt.Dimension(newWidth, (int)componentsRow1[i].getPreferredSize().getHeight()));
componentsRow1[i].setMaximumSize(new java.awt.Dimension(32767, (int)componentsRow1[i].getPreferredSize().getHeight()));
}
if (componentsRow2[i] != null)
{
componentsRow2[i].setPreferredSize(new java.awt.Dimension(newWidth, (int)componentsRow2[i].getPreferredSize().getHeight()));
componentsRow2[i].setMinimumSize(new java.awt.Dimension(newWidth, (int)componentsRow2[i].getPreferredSize().getHeight()));
componentsRow2[i].setMaximumSize(new java.awt.Dimension(32767, (int)componentsRow2[i].getPreferredSize().getHeight()));
}
}
//--- set search fields' sizes according to corresponding table column sizes--- END ---
Somit sollte eigentlich jedes TextField und das darüberliegende Label gleich groß wie seine zugehörige Spalte (die direkt darunter liegen sollte) sein. -> Ergebnis: ist aber nich so! Meine TextFields bekommen einfach irgendeine Größe.
Weitere Infos:
Die Maximum und minumum Size der TextFields habe ich bereits auf extrem hohen bzw. niedirgen Wert gesetzt.
Ich hoffe irgendjemand kann mir helfen denn ich bin schon ziemlich am Verzweifeln! Finde das Problem einfach nicht, eigentlich sollte die Methode in der ich die Preferred Size setzte ja auch die Arbeit wie gewünscht verrichten?!