未使用JPanel

时间:2016-11-18 20:49:46

标签: java swing paintcomponent imageicon

当我运行此代码时,从不调用PaintComponent,因为"画了"消息永远不会打印,我不知道为什么?有人可以帮忙吗?

public class DisplayManager extends JPanel {

public static final int WIDTH = 700, HEIGHT = 900;

public Bottle bottle1 = new Bottle("res/bottleimage.png");
public Slider slider1 = new Slider();

public void initDisplay()
{
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(new Dimension(WIDTH, HEIGHT));

    frame.add(panel);

    frame.setVisible(true);
}

@Override
public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    bottle1.imageIcon.paintIcon(this, g, 50, 50);
    System.out.println("painted");
}
}

1 个答案:

答案 0 :(得分:2)

基本代码存在一些问题:

  1. 如前所述,您需要将DisplayManager类的实例添加到框架或面板中。

  2. 进行自定义绘制时,您需要覆盖组件的getPreferredSize()方法以返回所需的大小。目前,组件的首选大小为(0,0)。

  3. 将DisplayManager添加到框架的建议仅起作用,因为默认布局管理器是BorderLayout,默认情况下会添加到布局的CENTER,这意味着它将获得所有可用空间框架。

    但是如果您使用:

    frame.add(this, BorderLayout.PAGE_START);
    

    你不会看到它的大小为(0,0)的组件大小;