我已经有这个问题了一段时间,搜索了很多论坛和网站(包括这个),仍然没有找到我的问题的答案。
这是我的问题: 我正在建立一个视觉日历。我有一个父面板,里面有多个面板。我重新绘制父面板,并使3覆盖不透明(假)。 父面板的绘画直到我调整框架时才会显示(或使用覆盖其中一个的按钮,但在此示例中省略了这些按钮,因为它会使代码更长)
无论如何,这是代码,我把它简化为问题部分:
public class Calendar extends JPanel{
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setSize(1600,150);
frame.add(new Calendar());
frame.setVisible(true);
}
public Calendar(){
setLayout(new GridBagLayout());
GridBagConstraints cc = new GridBagConstraints();
cc.weightx = 1;
cc.weighty = 1;
cc.gridx = 0;
cc.fill = GridBagConstraints.BOTH;
//Initiate Panels
JPanel yearpanel = new JPanel();
JPanel monthpanel = new JPanel();
JPanel daypanel = new JPanel();
yearpanel.setLayout(new GridBagLayout());
monthpanel.setLayout(new GridBagLayout());
daypanel.setLayout(new GridBagLayout());
// Set sizes
int width = (int) this.getPreferredSize().getWidth();
int height = (int) (this.getPreferredSize().getHeight() / 3);
yearpanel.setSize(width,height);
daypanel.setSize(width,height);
monthpanel.setSize(width,height);
//make transparent
yearpanel.setOpaque(false);
monthpanel.setOpaque(false);
daypanel.setOpaque(false);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Image image = Toolkit.getDefaultToolkit().getImage("Images/CalendarBackground.jpg");
g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
}
}
我不知道为什么会这样做+我无法在网上找到答案,只有那些有同样问题的人被遗弃的问题:/
任何人都可以帮助我吗?
答案 0 :(得分:3)
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Image image = Toolkit.getDefaultToolkit().getImage("Images/CalendarBackground.jpg");
g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
}
image
。相反,它应该被声明为类属性并预加载。 Toolkit
方法是异步的,因此将组件用作ImageObserver
更为重要。
g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this);
这是working SSCCE,就像你似乎正在尝试的那样。
答案 1 :(得分:0)
检查Graphics.drawImage()
的返回值。我打赌它会返回false,这意味着你正在绘制的图像还没有完全加载和缩放。尝试将图片加载到paintComponent
方法以外的其他位置,例如Calendar
构造函数。