java - JFrame最大化时如何调整JPanel的大小?

标签 java swing jpanel boxlayout preferredsize

我是java swing的新手,最近我尝试创建一个swing应用程序来格式化文本。 当我单击最大按钮时,文本面板的长度不会调整大小,并且中间面板占用很大的空间。

并且似乎setResizable(false)不起作用

代码

public class MainFrame extends JFrame {

    private static final long serialVersionUID = 7553142908344084288L;

    private JTextArea fromTextArea;
    private JTextArea toTextArea;

    public MainFrame() {
        super("jFormatter");
        Panel mainPanel = new Panel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS));
        setContentPane(mainPanel);

        fromTextArea = createTextArea();

        lines.setBorder(BorderFactory.createMatteBorder(0, 1, 0, 1, Color.LIGHT_GRAY));
        lines.setEditable(false);
        Font f = new Font(Font.SANS_SERIF, Font.PLAIN, 16);
        lines.setFont(f);

        JScrollPane fromTextAreaScrollPanel = new JScrollPane(fromTextArea);
        fromTextAreaScrollPanel.setBorder(BorderFactory.createEmptyBorder(15, 5, 15, 5));
        fromTextAreaScrollPanel.getViewport().add(fromTextArea);
        fromTextAreaScrollPanel.setRowHeaderView(lines);
        mainPanel.add(fromTextAreaScrollPanel);
        // control panel
        mainPanel.add(createCtrlPanel());

        toTextArea = createTextArea();
        mainPanel.add(createTextAreaPanel(toTextArea));

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setResizable(false);
        setVisible(true);
        setLocationRelativeTo(null);
    }

    private JPanel createCtrlPanel() {
        final JComboBox jComboBox = new JComboBox(formatters.keySet().toArray());
        jComboBox.setBorder(BorderFactory.createTitledBorder("Text Format"));

        JButton fmtButton = new JButton("Format >>");
        JPanel ctrPanel = new JPanel(new GridBagLayout());
        ctrPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        ctrPanel.add(jComboBox, gbc);
        ctrPanel.add(Box.createRigidArea(new Dimension(50, 15)), gbc);
        //gbc.fill = GridBagConstraints.NONE;
        ctrPanel.add(fmtButton, gbc);
        return ctrPanel;
    }

    private JScrollPane createTextAreaPanel(JTextArea textArea) {
        JScrollPane fromTextAreaScrollPanel = new JScrollPane(textArea);
        //fromTextAreaScrollPanel.setPreferredSize(new Dimension(300, 300));
        fromTextAreaScrollPanel.setBorder(BorderFactory.createEmptyBorder(15, 5, 15, 5));
        return fromTextAreaScrollPanel;
    }

    private JTextArea createTextArea() {
        JTextArea textArea = new JTextArea(20, 40);
        Font f = new Font(Font.SANS_SERIF, Font.PLAIN, 16);
        textArea.setFont(f);
        //fromTextArea.setLineWrap(true);
        //textArea.setBackground(Color.LIGHT_GRAY);
        textArea.setMargin(new Insets(0, 10, 0, 10));
        return textArea;
    }

    public static void main(String[] args) {
        new MainFrame();
    }
}

结果: when maxium

最佳答案

您可能应该使用BorderLayoutGridBagLayout为了这。 BoxLayout 只是按照组件的首选尺寸一个接一个地布置组件。它不会尝试调整组件大小或使它们填充其父级。

关于java - JFrame最大化时如何调整JPanel的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23948326/

相关文章:

java - 在 HashMap 中搜索

java - 使用leve包从xsd文件生成java类

java - 如何从 Firebase Android 中的用户 ID 获取用户对象

java - Swing 应用程序 -> 拖放到桌面/文件夹

java - 如何将 JTable 数据导出到 CSV 文件

java - GridLayout 仅在手动调整窗口大小时更新

java - 在另一个类(class)使用 jpanel? (菜鸟问题)

java - 在 Eclipse 中将图像添加到 JPanel

java - Codenameone CSS自定义字体需要花费时间才能呈现

java - JTextArea 麻烦