Ich habe ein JPanel mit Box.createVerticalBox()
Layout mit fünf JPanels. (1) Etikett, (2) eine Tabelle (3) eine JTextField (4) ein JTextArea (5) die Größe buttons.On:Java Größenanpassung einzelner Komponenten von JPanel
Etikett kleben sollten linke Ecke nach oben und die gleichen Größe halten,
JTextField sollte kleben zu der linken Größe zwischen (2) und (4) und auf die volle Breite des Rahmens erweitern
Tasten sollten in der unteren rechten Ecke bleiben und behalten die gleiche Größe,
JTable und JTextArea sollte auf die volle Breite des Rahmens erweitern und gleichmäßig teilen verbleibender Platz
Ich habe mehrere Layouts ausprobiert, konnte aber keine Größenänderung vornehmen. Um dieses Programm zwei Klassen ausgeführt werden EditPanel.java erforderlich:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class EditPanel extends JPanel {
private JPanel p1Labels;
private JPanel p2Table;
private JPanel p3ecnTitle;
private JPanel p5Buttons;
private JTextField fieldK;
private JTextField fieldS;
private JScrollPane myScrollBar;
private Box theBox;
public EditPanel() {
init();
}
public void init() { // Creating a vertical Box layout with five sections, placing jpanels there
//First panel with buttons
p1Labels = new JPanel(new FlowLayout(FlowLayout.LEFT, 2, 2));
fieldK = new JTextField("Animal");
fieldS = new JTextField("Fox");
p1Labels.add(new JLabel("Kindom: "));
p1Labels.add(fieldK);
p1Labels.add(new JLabel("Species: "));
p1Labels.add(fieldS);
//Second panel with a table
p2Table = new JPanel(new FlowLayout(FlowLayout.LEFT, 2, 2));
String[] columnNames = {"First", "Second", "Third", "Fourth"};
Object[][] data = {{"11", "12", "13", "Forteen"},{"21", "22", "23", "Twenty four"}};
JTable table = new JTable(data, columnNames);
JScrollPane scrollPane1 = new JScrollPane(new JTable(data, columnNames));
table.setFillsViewportHeight(true);
p2Table.add(scrollPane1, BorderLayout.CENTER);
//Third panel with a JTextField
p3ecnTitle = new JPanel(new FlowLayout(FlowLayout.LEFT, 2, 2));
p3ecnTitle.add(new JLabel("Title: "));
p3ecnTitle.add(new JTextField("", 14));
//Forth panel with JTextArea
//p4TextArea = new JPanel(new FlowLayout(FlowLayout.LEFT, 2, 2));//tried this too
JTextArea ecnArea = new JTextArea(10, 20);
ecnArea.setText("");
ecnArea.setName("Note");
ecnArea.setLineWrap(true);
ecnArea.setWrapStyleWord(true);
myScrollBar = new JScrollPane(ecnArea,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//Fifth container with buttons
p5Buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT, 2, 2));
p5Buttons.add(new JButton("SAVE"));
p5Buttons.add(new JButton("DELETE"));
p5Buttons.add(new JButton("CANCEL"));
//Placing everything in a container
theBox = Box.createVerticalBox();
theBox.add(p1Labels);
theBox.add(p2Table);
theBox.add(p3ecnTitle);
//theBox.add(p4TextArea);
theBox.add(myScrollBar);
theBox.add(Box.createVerticalGlue());
theBox.add(p5Buttons);
this.add(theBox);
}
}
Und die main.java
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
JFrame myFrame;
myPanel EditECNDialog;
myFrame = new JFrame();
EditECNDialog = new myPanel();
myFrame.setTitle("Notes");
myFrame.add(EditECNDialog);
myFrame.pack();
myFrame.setLocationRelativeTo(null);
myFrame.setVisible(true);
}
}
Welche Layout-Griffe die beste Größe ändern? Kann Boxlayout die Größenänderung übernehmen?
Ich weiß über die Erinnerung, aber wie kann ich das Layout so einstellen, dass es den Raum zwischen zwei Komponenten (JTextArea und JTable) aufteilt? – Stepan
Geben Sie für beide Komponenten den gleichen Wert 0,5 für 'weightx' an. – AhmadWabbi
(1+) Da dies ein vertikales Layout ist, würden Sie die "gewichtigen" Werte für beide Komponenten auf 0,5 setzen. Beachten Sie auch, dass die "gewichtige" nur für "extra" Platz ist, wenn der Rahmen in der Größe geändert wird.Wenn die Tabelle und der Textbereich die gleiche Größe haben sollen, müssen sie dieselbe bevorzugte Höhe haben, da ein GridBagLayout zuerst den Speicherplatz basierend auf der bevorzugten Größe zuweist und dann den gewichtx-Werten den zusätzlichen Speicherplatz zuweist. – camickr