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

时间:2014-05-30 06:22:07

标签: 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

2 个答案:

答案 0 :(得分:1)

您可能应该使用BorderLayoutGridBagLayout。 BoxLayout只是按照首选大小一个接一个地放置组件。它没有尝试调整组件的大小或使它们填充其父组件。

答案 1 :(得分:0)

尝试制作这样的布局: enter image description here

代码:

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;

public class Test extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test frame = new Test();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Test() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        GridBagLayout gbl_contentPane = new GridBagLayout();

        gbl_contentPane.columnWidths = new int[]{0, 0, 0, 0};
        gbl_contentPane.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        gbl_contentPane.columnWeights = new double[]{0.0, 0.0, 1.0, Double.MIN_VALUE};
        gbl_contentPane.rowWeights = new double[]{1.0, 0.0, Double.MIN_VALUE};
        contentPane.setLayout(gbl_contentPane);

        JScrollPane scrollPane = new JScrollPane();
        GridBagConstraints gbc_scrollPane = new GridBagConstraints();
        gbc_scrollPane.gridheight = 2;
        gbc_scrollPane.insets = new Insets(0, 0, 0, 5);
        gbc_scrollPane.fill = GridBagConstraints.BOTH;
        gbc_scrollPane.gridx = 0;
        gbc_scrollPane.gridy = 0;
        gbc_scrollPane.weightx=1;
        contentPane.add(scrollPane, gbc_scrollPane);

        JTextArea textArea = new JTextArea();
        scrollPane.setViewportView(textArea);

        JPanel panel = new JPanel();
        GridBagConstraints gbc_panel = new GridBagConstraints();
        gbc_panel.gridheight = 2;
        gbc_panel.insets = new Insets(0, 0, 5, 5);
        //gbc_panel.fill = GridBagConstraints.BOTH;
        gbc_panel.gridx = 1;
        gbc_panel.gridy = 0;
        contentPane.add(panel, gbc_panel);
        GridBagLayout gbl_panel = new GridBagLayout();
        gbl_panel.columnWidths = new int[]{0, 0, 0, 0};
        gbl_panel.rowHeights = new int[]{0, 0, 0, 0, 0, 0};
        gbl_panel.columnWeights = new double[]{0.0, 0.0, 1.0, Double.MIN_VALUE};
        gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
        panel.setLayout(gbl_panel);

        JComboBox comboBox = new JComboBox();
        GridBagConstraints gbc_comboBox = new GridBagConstraints();
        gbc_comboBox.insets = new Insets(0, 0, 5, 0);
        gbc_comboBox.fill = GridBagConstraints.HORIZONTAL;
        gbc_comboBox.gridx = 2;
        gbc_comboBox.gridy = 0;
        gbc_comboBox.weightx=0.0;
        panel.add(comboBox, gbc_comboBox);

        JButton btnNewButton = new JButton(">>");
        GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
        gbc_btnNewButton.insets = new Insets(0, 0, 5, 0);
        gbc_btnNewButton.gridx = 2;
        gbc_btnNewButton.gridy = 1;
        panel.add(btnNewButton, gbc_btnNewButton);

        JScrollPane scrollPane_1 = new JScrollPane();
        GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
        gbc_scrollPane_1.gridheight = 2;
        gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
        gbc_scrollPane_1.gridx = 2;
        gbc_scrollPane_1.gridy = 0;
        gbc_scrollPane_1.weightx=1;
        contentPane.add(scrollPane_1, gbc_scrollPane_1);

        JTextArea textArea_1 = new JTextArea();
        scrollPane_1.setViewportView(textArea_1);
pack();
        }

    }