问题来了,因为我覆盖了jPanel的paintComponent方法,因此当我重新绘制时,所有的objets都被隐藏,直到我将它们聚焦。 我需要覆盖paintComponent方法,因为它是我在互联网上找到的唯一一个改变jFrame背景图像的答案。
首先我创建一个jPanel类:
public class JPanelFondoPrincipal extends javax.swing.JPanel {
public JPanelFondoPrincipal(){
this.setSize(800,500);
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
Dimension tamanio = getSize();
ImageIcon imagenFondo = new ImageIcon(getClass().getResource("/images/fondo_principal.png"));
g.drawImage(imagenFondo.getImage(),0,0,tamanio.width, tamanio.height, null);
setOpaque(false);
}
}
在我的jPanelForm中:
private void formWindowOpened(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
JPanelFondo p = new JPanelFondo();
this.add(p);
validate();
p.repaint();
}
我已经尝试将所有我的Objets(标签,textFields ......)添加到一个新面板中,以便我可以在重绘后添加它,并手动设置所有对象可见但是一切仍然是不可见的。
非常感谢,我需要在6天内完成应用程序,我会在一分钟内变得疯狂
编辑:感谢CARDLAYOUT
答案 0 :(得分:3)
Swing程序应覆盖paintComponent()而不是覆盖paint()。
http://java.sun.com/products/jfc/tsc/articles/painting/
你应该首先在覆盖paintComponent();
中调用super.paintComponent(g);
public void paintComponent(Graphics g){
super.paintComponent(g);
Dimension tamanio = getSize();
ImageIcon imagenFondo = new ImageIcon(getClass().getResource("/images/fondo_principal.png"));
g.drawImage(imagenFondo.getImage(),0,0,tamanio.width, tamanio.height, null);
setOpaque(false);
}
Here's处理绘制到JPanel组件上的正确方法。
答案 1 :(得分:3)
请勿add
/ remove
JPanels
或其内容在运行时使用CardLayout代替
您的JPanelFondo p = new JPanelFondo();
与public class JPanelFondoPrincipal extends javax.swing.JPanel {
不相符
通过SSCCE,