BorderLayout只显示一个对象

时间:2014-05-24 16:04:17

标签: java swing jpanel border-layout preferredsize

我决定编写一个小型Java程序来试验BorderLayout,因为我正在开发一个Java游戏,我需要在同一时间将2个对象放在一个JFrame中,我问的每个人都说我需要BorderLayout这样做。

所以我编写的Java程序应该在JFrame上放置一个JButton,并且放置一个图形组件(在这种情况下是一个矩形)。问题是,只有按钮显示,如下面的图像链接所示:

http://prntscr.com/3m5ek6

由于我的声誉统计数据不佳,我无法发布实际图像。

以下是代码:

main.java - >主方法类+ JFrame / JPanel / JButton构造函数

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class main {

public static void main(String[] args) {

    Infout m = new Infout();
    JFrame f = new JFrame();
    JPanel start = new JPanel();
    JPanel start2 = new JPanel();

    start.add(m);
    start2.add(new JButton("Hi"));

    f.add(start,BorderLayout.LINE_START);
    f.add(start2, BorderLayout.LINE_END);
    f.setVisible(true);
    f.setSize(300, 400);

}

}

Infout.java - > Rectangle构造函数类

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;


public class Infout extends JPanel{

public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.fill(new Rectangle2D.Double(140, 270, 5, 300));
}

}

有人能告诉我什么是错的吗?另外,使用BorderLayout是将多个静态和/或动态对象添加到JFrame的最佳选择吗?

谢谢!

抗体

1 个答案:

答案 0 :(得分:2)

您需要覆盖getPreferredSize()方法,以便布局管理器可以确定组件的正确大小。

How do I do that?

阅读Custom Painting上Swing教程中的部分,了解有关自定义绘制的更多信息,包括显示如何覆盖getPreferredSize()方法的工作示例。