GridBagLayout问题

时间:2014-01-31 03:37:32

标签: java swing gridbaglayout

我遇到GridBagLayout时遇到问题。

用户选择一个文件,如果该文件大于我显示的JTextArea,则共享GridBagLayout中的所有Swing组件都会变得混乱。如果它能够适合JTextField,则所有Swing组件都可以。

以下是我想要的JFrame布局的screenshot

Want

here是我在包含文件路径的JFrame大于其分配大小时获得的JTextArea布局。

Have

所有其他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);

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,这花了一些力气。

基本上,当你构建frame_panel时,gridwidth = 2file_path_tf使用info_panel,这一切都很好,但是你永远不会重置属性你添加按钮。

这意味着save_button可以占据第0列和第1列而cancel_button可以占据1和2

在添加gridwidth之后和添加按钮之前重置info_pane属性

gbc.gridwidth = 1;

此外,我认为你会发现JLabel更容易处理JTextArea标记字段,但那只是我。