Hi!
Ich habe einen JFrame mit mehrzeiligem Inhalt. Es kommen unter anderem JTextFields vor. Zwischen den Zeilen hätte ich gern den Glue der Klasse [japi]javax.swing.Box[/japi]. Dies funktioniert jedoch nicht. Statt eines sich erweiternden Zwischenraums erweitern sich nur die Textfelder in der Höhe. Die Glue-Komponente bleibt bei einer Höhe von 0px. Nehme ich statt der Textfelder andere Swing-Komponenten wie JLabel oder JButton, so funktionierts auch. Nehme ich statt JTextFields TextFields (also AWT), so funktioniert es ebenfalls, obwohl der Package-Name (javax.swing) und die Superklasse (JComponent) doch eigentlich suggerieren, dass die Komponente Box "im Wohlklang" mit Swing-Komponenten ist.
Hier ein KSKB bzgl. "Swing vs. AWT":
Wieso funktioniert es nicht mit JTextFields? / Wie kriege ich es hin, dass es auch mit JTextFields funktioniert?
Noch eine Frage bzgl. des AWT-Beispiels: Dort ist es so, dass sich nicht nur der Zwischenraum erweitert, sondern auch die Textfelder. Wie kriege ich es am elegantesten hin, dass sich wirklich nur die Zwischenräume erweitern? Ist das BoxLayout überhaupt dafür geeignet?
Ich habe einen JFrame mit mehrzeiligem Inhalt. Es kommen unter anderem JTextFields vor. Zwischen den Zeilen hätte ich gern den Glue der Klasse [japi]javax.swing.Box[/japi]. Dies funktioniert jedoch nicht. Statt eines sich erweiternden Zwischenraums erweitern sich nur die Textfelder in der Höhe. Die Glue-Komponente bleibt bei einer Höhe von 0px. Nehme ich statt der Textfelder andere Swing-Komponenten wie JLabel oder JButton, so funktionierts auch. Nehme ich statt JTextFields TextFields (also AWT), so funktioniert es ebenfalls, obwohl der Package-Name (javax.swing) und die Superklasse (JComponent) doch eigentlich suggerieren, dass die Komponente Box "im Wohlklang" mit Swing-Komponenten ist.
Hier ein KSKB bzgl. "Swing vs. AWT":
Java:
import java.awt.Container;
import java.awt.Frame;
import java.awt.Point;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class GlueTest {
public static void main(String[] args) {
final int width = 200;
final int height = 150;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JFrame jFrame = new JFrame(GlueTest.class.getSimpleName() + "Swing");
final Container jContent = Box.createVerticalBox();
jContent.add(new JTextField());
jContent.add(Box.createVerticalGlue());
jContent.add(new JTextField());
jFrame.setContentPane(jContent);
jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jFrame.setSize(width, height);
jFrame.setLocationRelativeTo(null);
final Point jLocation = jFrame.getLocation();
jFrame.setLocation(jLocation.x - width / 2, jLocation.y);
jFrame.setVisible(true);
final Frame frame = new Frame(GlueTest.class.getSimpleName() + "AWT");
final Container content = Box.createVerticalBox();
content.add(new TextField());
content.add(Box.createVerticalGlue());
content.add(new TextField());
frame.add(content);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
frame.dispose();
}
});
frame.setSize(width, height);
frame.setLocationRelativeTo(null);
final Point location = frame.getLocation();
frame.setLocation(location.x + width / 2, location.y);
frame.setVisible(true);
}
});
}
}
Noch eine Frage bzgl. des AWT-Beispiels: Dort ist es so, dass sich nicht nur der Zwischenraum erweitert, sondern auch die Textfelder. Wie kriege ich es am elegantesten hin, dass sich wirklich nur die Zwischenräume erweitern? Ist das BoxLayout überhaupt dafür geeignet?