1

我的ContentPane包含几个JPanels依次包含的JTabbedPanes东西和其他东西。当用户缩小或扩大窗口时,如何让这些 JPanel 改变它们的大小。有没有办法设置百分比大小?

JPanel panelOne = new JPanel;
panelOne.setSize( // % of );
4

2 回答 2

3

您可以在 ContentPanes 上使用多种布局方法。对于基于相对于画布的大小进行缩放的内容,您可以尝试使用SpringLayout并定义与内容窗格本身相关的边框。其他元素可以被约束到该锚定元素或内容窗格。

您可以使用约束来根据 ContentPane 或其他元素拉伸面板。

您可以使用WindowBuilder for Eclipse直观地规划 SpringLayout(以及其他可能的布局,例如 Mig、Grid 等) 。根据您的布局的大小和比例,您可能会根据您的要求或偏好找到更实用的其他布局。

于 2013-11-05T21:38:59.083 回答
3

使用适当的布局管理器,这就是它们的用途。他们负责监控父容器更改并根据更改计算所需设置所涉及的所有繁琐工作。

看看在容器中布局组件

动画 gif

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

public class TestSizableComponents {

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

    public TestSizableComponents() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JTabbedPane tabbedPane = new JTabbedPane();
                for (int index = 0; index < 10; index++) {
                    tabbedPane.add(Integer.toString(index), new TabPane(Integer.toString(index)));
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new HeaderPane(), BorderLayout.NORTH);
                frame.add(tabbedPane);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class HeaderPane extends JPanel {

        public HeaderPane() {

            setLayout(new GridBagLayout());
            add(new JLabel("Look ma, no hands"));
            setBorder(new CompoundBorder(new LineBorder(Color.RED), new EmptyBorder(10, 10, 10, 10)));

        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 100);
        }

    }

    public class TabPane extends JPanel {

        public TabPane(String name) {

            setLayout(new GridBagLayout());
            add(new JLabel(name));
            setBorder(new EmptyBorder(10, 10, 10, 10));

        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

    }

}
于 2013-11-05T23:29:42.230 回答