Sie können nicht ernst Layouts GridLayout
oder BoxLayout
withe. Vergiss über sie.
Die erste Frage ist: Sind Sie sicher, dass Sie nicht möchten, dass die JTextArea
und JTextField
wachsen? Es ist ein Standard in UI, dass diese Komponenten wachsen und schrumpfen; der erste in beide Richtungen und der zweite horizontal.
Wie auch immer, ich poste Lösungen für GroupLayout
und MigLayout
, die sind die Manager, die ich sehr empfehlen.
a) Lösung mit GroupLayout
Jede Komponente hat drei Größen: Minimum, bevorzugt und Maximum. Diese sind auf einige sinnvolle Standardwerte für jede Komponente festgelegt. Deshalb neigt die JTextField
dazu, horizontal zu wachsen; Der maximale Wert ist sehr große Zahl.
package com.zetcode;
import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class GroupLayoutStretchingEx extends JFrame {
public GroupLayoutStretchingEx() {
initUI();
}
private void initUI() {
JTextArea area = new JTextArea(12, 20);
area.setBorder(BorderFactory.createEtchedBorder());
JLabel input = new JLabel("Input");
JTextField textField = new JTextField(15);
createLayout(area, input, textField);
setTitle("Stretching");
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void createLayout(JComponent... arg) {
Container pane = getContentPane();
GroupLayout gl = new GroupLayout(pane);
pane.setLayout(gl);
gl.setAutoCreateContainerGaps(true);
gl.setAutoCreateGaps(true);
gl.setHorizontalGroup(gl.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addComponent(arg[0], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGroup(gl.createSequentialGroup()
.addComponent(arg[1])
.addComponent(arg[2], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
);
gl.setVerticalGroup(gl.createSequentialGroup()
.addComponent(arg[0], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGroup(gl.createParallelGroup()
.addComponent(arg[1])
.addComponent(arg[2], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
);
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
GroupLayoutStretchingEx ex = new GroupLayoutStretchingEx();
ex.setVisible(true);
});
}
}
In GroupLayout
, müssen Sie die richtigen Werte für die maximale Komponentengröße im addComponent()
Verfahren einzustellen.
JTextArea area = new JTextArea(12, 20);
Durch die Anzahl der Zeilen und Spalten für die JTextArea
Einstellung wir eine preffered Größe für diese Komponente festgelegt. Dieser Wert wird später vom Layout-Manager in seinen Berechnungen verwendet.
b) Lösung mit MigLayout
In MigLayout
steuern wir das resizement der Komponenten mit verschiedenen Constraints, wie fill
, grow
oder push
. Wenn sie nicht verwendet werden, wachsen die Komponenten nicht.
package com.zetcode;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
public class MigLayoutStretchingEx extends JFrame {
public MigLayoutStretchingEx() {
initUI();
}
private void initUI() {
JTextArea area = new JTextArea(12, 20);
area.setBorder(BorderFactory.createEtchedBorder());
JLabel input = new JLabel("Input");
JTextField textField = new JTextField(15);
createLayout(area, input, textField);
setTitle("MigLayout example");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void createLayout(JComponent... arg) {
setLayout(new MigLayout());
add(arg[0], "wrap");
add(arg[1], "split 2");
add(arg[2], "growx");
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
MigLayoutStretchingEx ex = new MigLayoutStretchingEx();
ex.setVisible(true);
});
}
}
Und hier ist der Screenshot:
Bitte senden Sie einige Stück Code, das Problem zu untersuchen. – Braj
Beginnen Sie mit einem Blick auf [Layout Komponenten in einem Container] (http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html) für einige weitere Details über die verschiedenen Layout-Manager, etwas wie 'FlowLayout' und' GridBagLayout' würden den Job erledigen – MadProgrammer
Stellen Sie ASCII-Art oder eine einfache Zeichnung des * beabsichtigten * Layouts der GUI bei minimaler Größe zur Verfügung, und wenn sie veränderbar ist, mit mehr Breite und Höhe. –