2016-07-19 20 views
-1

Ich habe eine Desktop-Anwendung in Schwung. Ich habe ein JPanel, in dem das Bild als Hintergrund und darin zwei Knöpfe und eine JScrollPane wie im Bild Frame with JPanel gezeigt wird. Ich habe eine Funktion (showLabel()) die, wenn JScrollPane das Ende, JLabel mit transparenten Bildern hinzufügen und ein paar Sekunden verschwinden. Das Problem ist, dass wenn Sie JLabel hinzufügen. JLabel schlecht zeigt, wie in Fig. Bad shows zu sehen ist. Kannst du mir bei meinem Problem helfen?Java falsche Ansicht JPanel

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(); 

} 

}

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; 

} 

}

+2

1) Für eine bessere Hilfe früher, Posten [MCVE] oder [Kurz, Self Contained, Korrekt Beispiel] (http://www.sscce.org /). 2) Eine Möglichkeit, Bilder für ein Beispiel zu erhalten, besteht darin, eine direkte Verbindung zu Bildern herzustellen, die in [diesem Q & A] (http://stackoverflow.com/q/19209650/418556) zu sehen sind. –

+0

Sie haben einige andere Dinge in MyPaint - ein einfaches Foto oben auf Foto wäre nicht eine ernste Sache - zeigen Sie den vollständigen Code – gpasch

+0

@gpasch * "zeigen den vollständigen Code" * Stimme nicht zu. Ein MCVE wäre die *** *** *** *** optimale Form von Code zum Präsentieren. Beachten Sie, dass '[mcve]' in einem Kommentar automatisch auf [mcve] erweitert wird. Branislav Pažický - bitte geben Sie den Code nicht in einen Kommentar ein, wo er weitgehend unlesbar ist. Es sollte in der Frage als Bearbeitung enthalten sein. –

Antwort

0

Ich würde vorschlagen, die getResource() -Methode anstelle des getResourceAsStream() und haben den Weg der beiden zu verwenden, Bilder eingegeben auf diese Weise.

Der classLoader könnte sich anders verhalten (in Ihrem Fall aufgrund der Unterschiede zwischen den beiden Betriebssystemen), also würde es auf diese Weise garantieren, dass Ihre Anwendung immer die richtigen Ressourcen bekommt.

mehr auf dem getResource hier:

https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String)

+0

Ich habe es in getResource geändert, aber immer noch das Gleiche. –

+0

Sorry, ich habe es geändert. –