我遇到GridBagLayout
时遇到问题。
用户选择一个文件,如果该文件大于我显示的JTextArea
,则共享GridBagLayout
中的所有Swing组件都会变得混乱。如果它能够适合JTextField
,则所有Swing组件都可以。
以下是我想要的JFrame
布局的screenshot:
here是我在包含文件路径的JFrame
大于其分配大小时获得的JTextArea
布局。
所有其他JTextFields
以及下面的按钮都会受到影响。我不在乎JTextArea
中的文本是否大于其大小,我只是希望所有的swing组件保持不变。
以下是我将Swing组件添加到文件信息面板的代码:
//Setup layout.
gbc = new GridBagConstraints();
//File info panel.
gbc.insets = new Insets(3, 10, 3, 10);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.HORIZONTAL;
info_panel.add(first_name_jta, gbc);
gbc.gridx = 1;
gbc.gridy = 0;
info_panel.add(first_name_tf, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
info_panel.add(last_name_jta, gbc);
gbc.gridx = 1;
gbc.gridy = 1;
info_panel.add(last_name_tf, gbc);
gbc.gridx = 0;
gbc.gridy = 2;
info_panel.add(frame_type_jta, gbc);
gbc.gridx = 1;
gbc.gridy = 2;
info_panel.add(frame_type_cb, gbc);
gbc.gridx = 0;
gbc.gridy = 3;
info_panel.add(eye_size_jta, gbc);
gbc.gridx = 1;
gbc.gridy = 3;
info_panel.add(eye_size_tf, gbc);
//Frame panel.
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 2;
gbc.fill = GridBagConstraints.BOTH;
frame_panel.add(file_path_tf, gbc);
gbc.gridy = 1;
frame_panel.add(info_panel, gbc);
gbc.gridy = 2;
gbc.insets = new Insets(10, 60, 10, 60);
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.WEST;
frame_panel.add(save_button, gbc);
gbc.gridx = 1;
gbc.gridy = 2;
gbc.anchor = GridBagConstraints.EAST;
frame_panel.add(cancel_button, gbc);
有什么想法吗?
答案 0 :(得分:0)
好的,这花了一些力气。
基本上,当你构建frame_panel
时,gridwidth = 2
和file_path_tf
使用info_panel
,这一切都很好,但是你永远不会重置属性你添加按钮。
这意味着save_button
可以占据第0列和第1列而cancel_button
可以占据1和2
在添加gridwidth
之后和添加按钮之前重置info_pane
属性
gbc.gridwidth = 1;
此外,我认为你会发现JLabel
更容易处理JTextArea
标记字段,但那只是我。