Java 未使用JPanel调用PaintComponent
当我运行此代码时,PaintComponent从未被调用,因为“painted”消息从未被打印,我不知道为什么?有人能帮忙吗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
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)BorderLayout
,并且默认情况下添加到布局的中心
,这意味着它可以获得框架中的所有可用空间
但是,如果您使用:
frame.add(this, BorderLayout.PAGE_START);
您将看不到其大小为(0,0)的组件大小 基本代码有几个问题:
DisplayManager
类的实例添加到框架或面板中getPreferredSize()
方法以返回所需的大小。当前组件的首选大小为(0,0)BorderLayout
,并且默认情况下添加到布局的中心
,这意味着它可以获得框架中的所有可用空间
但是,如果您使用:
frame.add(this, BorderLayout.PAGE_START);
您将看不到其大小为(0,0)的组件大小 如果您的
DisplayManager
应该是JPanel
,则必须将DisplayManager
添加到框架中,而不是新的JPanel
<代码>框架。添加(此)
而不是框架。添加(面板)
谢谢worked@PDPIG,这只是解决方案的一半。如果您的DisplayManager
应该是JPanel
,则必须将DisplayManager
添加到框架中,而不是新的JPanel
<代码>框架。添加(此)
而不是框架。添加(面板)
谢谢worked@PDPIG,这只是解决方案的一半。