JPanelを5個含むBox.createVerticalBox()
レイアウトのJPanelがあります。 (1)ラベル、(2)テーブル(3)JTextFieldの(4)JTextAreaの(5)buttons.Onリサイズ:JPanelの個々のコンポーネントのJavaサイズ変更
ラベルが左コーナーを上部と同じサイズを保つために固執する必要があり、
のJTextFieldに固執する必要があります(2)と(4)の間の左のサイズに拡大し、フレームの全幅に拡大
ボタンは右下に固定して同じサイズを維持する必要があります。
JTableとJTextAreaはフレームの全幅に拡張し、残りのスペース
私はいくつかのレイアウトを試しましたが、サイズ変更作業を行うことができませんでした。
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);
}
}
そして、最高のリサイズハンドルレイアウト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);
}
}
: は、2つのクラスがEditPanel.java必要とされているこのプログラムを実行するには? boxlayoutはサイズ変更を処理できますか?
私は注意書きについて知っていますが、2つのコンポーネント(JTextAreaとJTable)の間のスペースを分割するようにレイアウトを設定するにはどうすればよいですか? – Stepan
両方の成分の 'weightx'に同じ値0.5を与えます。 – AhmadWabbi
(1+)これは縦型レイアウトなので、両方のコンポーネントで 'weighty'値を0.5にします。また、 'weighty'は、フレームがサイズ変更されるときに、余分なスペースだけに使用されることにも注意してください。それはあなたがテーブルとテキスト領域が同じサイズになりたい場合はGridBagLayoutのが第一の好適なサイズに基づいてスペースを割り当て、weightxに値に余分なスペースを割り当てているので、それらも同じ優先の高さを持っている必要があります。 – camickr