Java错误视图JPanel

Java错误视图JPanel,java,image,swing,jpanel,Java,Image,Swing,Jpanel,我在swing中有一个桌面应用程序。我有一个JPanel,其中图像作为背景,其中有两个按钮和一个JScrollPane,如图所示。我有一个函数(showLabel()),当JScrollPane结束时,它会添加带有透明图像的JLabel,然后消失几秒钟。问题是,当您添加JLabel时。JLabel bad显示如图所示。你能帮我解决我的问题吗 public class MainWindow { private JFrame frame; private PanelPopis panelPo

我在swing中有一个桌面应用程序。我有一个JPanel,其中图像作为背景,其中有两个按钮和一个JScrollPane,如图所示。我有一个函数(showLabel()),当JScrollPane结束时,它会添加带有透明图像的JLabel,然后消失几秒钟。问题是,当您添加JLabel时。JLabel bad显示如图所示。你能帮我解决我的问题吗

 public class MainWindow {

 private JFrame frame;
 private PanelPopis panelPopis = new PanelPopis(this);
 private MyPaint myPaint;

 public MainWindow {

    setWindow():
    BufferedImage image1 = ImageIO.read(getClass().getClassLoader().getResource("poz.png"));

    this.myPaint = new MyPaint(image1);
    this.frame.add(myPaint);

    this.myPaint.add(panelPopis.setPanel());

}


 private void setWindow() {
    this.frame = new JFrame("DD");
    this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.frame.setSize(400, 680);
    this.frame.setResizable(false);
    this.frame.setLocationRelativeTo(null);
 }

 private void showLabel(){

   JLabel label = new JLabel();

   label.setIcon(new ImageIcon(new ImageIcon(getClass().getClassLoader().getResource("postEn.png")).getImage().getScaledInstance(395, 653, Image.SCALE_DEFAULT)));
   label.setBackground(new Color(0, 0, 0, 10));
   label.setOpaque(true);

   this.frame.invalidate();
   this.frame.add(label);
   this.frame.revalidate();

    int delay2 = 3000; // milliseconds
    ActionListener taskPerformer2 = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            frame.remove(label);
            frame.revalidate();
            frame.repaint();
        }

    };
    Timer myTimer2 = new Timer(delay2, taskPerformer2);
    myTimer2.setRepeats(false);
    myTimer2.start();

}
}

}


}

我建议使用getResource()方法而不是getResourceAsStream(),并以这种方式输入两个图像的路径

类加载器的行为可能会有所不同(在您的情况下,这是由于两个操作系统之间的差异),因此这样做可以确保您的应用程序始终获得正确的资源

有关getResource的更多信息,请单击此处:


1)要更快地获得更好的帮助,请发布一个或。2) 例如,获取图像的一种方法是热链接到中看到的图像。MyPaint中还有一些其他内容—在照片上放一张简单的照片并不是一件严肃的事情—显示完整内容code@gpasch“显示完整代码”不同意。MCVE将是最理想的代码呈现形式。请注意,注释中的
[mcve]
将自动展开为。Branislav Pažický-请不要将代码放在大部分不可读的注释中。它应该作为编辑包含在问题中。抱歉,我更改了它。1)提示:添加@gpasch(或任何人,
@
很重要)以通知此人新的评论。2) 看看有没有问题,我再也懒得去解决了。但还要注意a)不同的代码段将“一起运行”,除非它们之间有“无代码格式化”部分。我通常用类名作为标题——这就很管用了。b) 但要制作一个合适的MCVE,它应该只进行一次复制/粘贴。这可以通过离开来实现。我将其更改为getResource,但仍然执行相同的操作。抱歉,我更改了它。
public class MyPaint extends JPanel {

private static final long serialVersionUID = 1L;
BufferedImage image;

public MyPaint(BufferedImage image) {
    setOpaque(false);
}


public void paintComponent(Graphics g) {
    super.paintComponent(g);
        g.drawImage(image, 0, 0, 395, 653, this);

}
public class PanelPopis extends JPanel {

private static final long serialVersionUID = 7676683627217636485L;

private JButton setLanguage;
private JButton cont;
private JScrollPane scrolPanel;
private JTextArea popis;
private MainWindow mainWindow;

public PanelPopis(MainWindow mainWindow) {
    this.mainWindow = mainWindow;

}

public JPanel setPanel() {

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.setOpaque(false);

    JPanel panel2 = new JPanel();
    Border border = panel2.getBorder();
    Border margin = new EmptyBorder(0, 0, 4, 0);
    panel2.setBorder(new CompoundBorder(border, margin));

    panel2.setOpaque(false);
    panel2.add(this.scrolPanel = new JScrollPane(popis));

    panel.add(this.setLanguage = new JButton("language settings"),   BorderLayout.NORTH);
    panel.add(this.cont = new JButton("CONTINUE"), BorderLayout.SOUTH);
    panel.add(panel2, BorderLayout.CENTER);

    return panel;

}