绘制图形并使用BorderLayout将其放置在面板中

时间:2014-11-27 15:03:15

标签: java swing jpanel border-layout

public MyLayout (){
        frame.setLayout(new BorderLayout());
        panel.setLayout(new BorderLayout());

        panel.add(new GraphicsSurface(),BorderLayout.CENTER);


        frame.add(panel,BorderLayout.NORTH);

        frame.add(btn1,BorderLayout.SOUTH);
        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true); 
    }

我正在创建一个将其放置在面板中的图形

panel.add(new GraphicsSurface(),BorderLayout.CENTER);

并将此面板放在JFrame中

frame.add(panel,BorderLayout.NORTH);

除了图形显示在JFrame外面

JFrame

2 个答案:

答案 0 :(得分:4)

  

"我希望将图形显示在JFrame顶部的中心位置。我还有更多广告组件"

GraphicsSurface覆盖getPreferredSize并给它你想要的大小(我想时钟的大小

class GraphicsSurface extends JPanel {
    @Override
    public Dimension getPreferredSize() {
        return new Dimenstion(..., ...);
    }
}

对于panel,请勿设置布局。默认FlowLayout将完美运行(默认情况下也是中心-yeeee!)。会发生什么是GraphicsSurface将保持其首选大小,因为FlowLayout会尊重它。然后panel将被拉伸到框架的宽度(高度将保持GraphicsSurface的高度),GraphicsSurface将在{{1}中居中}}

有了这个,你应该没问题,将panel添加到框架panel。该中心将留给其他一切。

答案 1 :(得分:1)

您将面板放在第NORTH帧。 在北方,您的面板将仅采用寡妇宽度。所以他没有身高(或1px身高)。

因此,请尝试为面板定义尺寸:

panel.setPreferedSize(new Dimension(200, 200));

另外,正如评论中所建议的那样,将您的面板放入框架的中心。

替换:

frame.add(panel,BorderLayout.NORTH);

通过

frame.add(panel,BorderLayout.CENTER);

在中央,面板将获得面板宽度和高度(减去按钮高度)。

相关问题