将2个jpanel放入borderlayout

时间:2015-03-16 18:28:47

标签: java swing

我正在尝试将2个JPanel放在borderLayout中。这样,一个JPanel的大小为pane1(600,600),另一个为pane2(200,600)。我希望打包它们,使得大的一个在左边,另一个在右边。 我正在设置每个jpane的大小,但看起来它们都占据了完整的空间并且彼此重叠。

我是一个完整的新手,不知道出了什么问题。任何帮助表示赞赏。 JFrame frame = new JFrame("Simple Graph"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); int pane1_width = FRAME_WIDTH-200;//800-200 Pane1 myPlots = new Pane1(graph_panel_size, FRAME_HEIGHT);
frame.add(myPlots); Pane2 simpleInfo = new Pane2(200,FRAME_HEIGHT); frame.add(simpleInfo); frame.pack(); frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); frame.setResizable(false); frame.setVisible(true);

这是一个基础框架类。对于JPanel

public Pane2(int width,int height){
this.setSize(width,height); Border blackline = BorderFactory.createTitledBorder("ola"); this.setBorder(blackline);

另一个面板也有类似的构造函数。但两个Jpanels相互重叠,我不能分开放置它们。

1 个答案:

答案 0 :(得分:4)

问题在于您正在呼叫setSize()。使用LayoutManager时(您绝对应该这样做),使用setSize/setBounds/setLocation完全没用。

另外,不建议调用setPreferredSize()/setMinimumSize/setMaximumSize,这可能适得其反。

你的组件有充分的理由拥有给定的大小(例如,因为你正在进行自定义绘画),那么你应该覆盖getPreferredSize,或者你根本不需要做任何事情,只有使用适当的LayoutManager

您还可以check out the tutorial on LayoutManager of Oracle

请参阅此示例,并覆盖getPreferredSize()

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestCustomPainting {

    private static class MyTriangle extends JPanel {

        private final int width;
        private final int height;

        public MyTriangle(int width, int height) {
            this.width = width;
            this.height = height;
        }

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

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.GREEN);
            g.fillPolygon(new int[] { 0, getWidth(), 0 }, new int[] { 0, 0, getHeight() }, 3);
        }

    }

    protected static void initUI() {
        JFrame frame = new JFrame("test");
        frame.add(new MyTriangle(200, 45), BorderLayout.EAST);
        frame.add(new MyTriangle(85, 600), BorderLayout.WEST);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                initUI();
            }
        });
    }
}

注意:我必须承认,绘画更有意思: - )