Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未使用JPanel调用PaintComponent_Java_Swing_Paintcomponent_Imageicon - Fatal编程技术网

Java 未使用JPanel调用PaintComponent

Java 未使用JPanel调用PaintComponent,java,swing,paintcomponent,imageicon,Java,Swing,Paintcomponent,Imageicon,当我运行此代码时,PaintComponent从未被调用,因为“painted”消息从未被打印,我不知道为什么?有人能帮忙吗 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 Sl

当我运行此代码时,PaintComponent从未被调用,因为“painted”消息从未被打印,我不知道为什么?有人能帮忙吗

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");
}
}

基本代码有几个问题:

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

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

  • 将DisplayManager添加到框架的建议仅起作用,因为默认布局管理器是一个
    BorderLayout
    ,并且默认情况下添加到布局的
    中心
    ,这意味着它可以获得框架中的所有可用空间

    但是,如果您使用:

    frame.add(this, BorderLayout.PAGE_START);
    

    您将看不到其大小为(0,0)的组件大小

    基本代码有几个问题:

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

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

  • 将DisplayManager添加到框架的建议仅起作用,因为默认布局管理器是一个
    BorderLayout
    ,并且默认情况下添加到布局的
    中心
    ,这意味着它可以获得框架中的所有可用空间

    但是,如果您使用:

    frame.add(this, BorderLayout.PAGE_START);
    

    您将看不到其大小为(0,0)的组件大小

    如果您的
    DisplayManager
    应该是
    JPanel
    ,则必须将
    DisplayManager
    添加到
    框架中,而不是新的
    JPanel
    <代码>框架。添加(此)
    而不是
    框架。添加(面板)
    谢谢worked@PDPIG,这只是解决方案的一半。如果您的
    DisplayManager
    应该是
    JPanel
    ,则必须将
    DisplayManager
    添加到
    框架中,而不是新的
    JPanel
    <代码>框架。添加(此)
    而不是
    框架。添加(面板)
    谢谢worked@PDPIG,这只是解决方案的一半。