如何在JFrame中安排组件

时间:2016-02-05 00:31:08

标签: java swing jframe layout-manager

我正在尝试使用一个“保存”JButton的JTextArea位于其下方,如果可能的话,可能在组件之间以及框架的组件之间进行少量填充。我试过搞乱布局管理器,面板等等,似乎无法得到我想要的结果。只是寻找最简单的方法来做到这一点。感谢。

1 个答案:

答案 0 :(得分:6)

建议:

  • GUI容器的整体布局可以是BorderLayout。
  • 添加包含JTextArea BorderLayout.CENTER的JScrollPane。
  • 创建一个JPanel只是为了保存JButton并且不给它一个特定的布局管理器。它现在将使用JPanel的默认FlowLayout,并将组件放在水平方向上。
  • 将您的JButton添加到最后一个JPanel。
  • 将相同的JPanel添加到BorderLayout.PAGE_END(底部)位置的GUI中。

例如:

enter image description here

import java.awt.BorderLayout;
import javax.swing.*;

public class SimpleLayout extends JPanel {
    private static final int ROWS = 20;
    private static final int COLS = 60;
    private JTextArea textArea = new JTextArea(ROWS, COLS);
    private JButton button = new JButton("Button");

    public SimpleLayout() {
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(button);

        setLayout(new BorderLayout());
        add(new JScrollPane(textArea), BorderLayout.CENTER);
        add(buttonPanel, BorderLayout.PAGE_END);
    }

    private static void createAndShowGui() {
        SimpleLayout mainPanel = new SimpleLayout();

        JFrame frame = new JFrame("SimpleLayout");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            createAndShowGui();
        });
    }
}