2012-04-09 12 views
1

Ich bin neu in Java und ich kann nicht scheinen, diesen Bug mit transluzenten Hintergründen zu beheben.JPanels in einem Gridlayout verursacht Transparenzprobleme

Immer, wenn ich Teile meines Panels ändere, zeichnet es die Änderungen sowie einige zufällige Bilder des Fensters.

Klarere Bilder des Fehlers

Hier ist ein Link auf die volle Arbeitsprojekt, so dass Sie deutlich den Fehler zu sehen. Geben Sie es nur eine Minute, um meinen Server zu laden ist langsam http://fong.shujindesigns.net

Ich machte diese kleinere Version des Bugs, so dass Sie testen können.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.event.MouseEvent; 

public class Example1 extends JApplet implements MouseListener { 


    Container Con = getContentPane(); 
    JPanel panel1 = new JPanel(new GridLayout(5, 5, 0, 0)); 
    JPanel[][] panel2 = new JPanel[5][5]; 
    JLabel[] label = new JLabel[25]; 
    Color color; 
    int count = 0; 

    public void init() { 

     int col = 0; 
     int row = 0; 
     color = new Color(0.00f, 0.24f, 0.70f, 0.50f); 

     for (int i = 0; i < 25; i++) { 
      if (col > 4) { 
       col = 0; 
       row++; 
      } 
     label[i] = new JLabel("test"); 
     label[i].addMouseListener(this); 
     panel2[col][row] = new JPanel(); 
     panel2[col][row].add(label[i]); 
     color = new Color(0.00f, 0.24f, 0.70f, 0.20f); 
     panel2[col][row].setBackground(color); 
     label[i].setBorder(BorderFactory.createLineBorder(Color.red)); 
     panel1.add(panel2[col][row]); 
     color = new Color(0.50f, 0.24f, 0.10f, 0.20f); 
     panel1.setBackground(color); 
     col++; 
     } 



     Con.add(panel1); 
     panel1.setOpaque(false); 
     label[5].setText("test2"); 
    } 


    public void mouseEntered(MouseEvent e) { 
    } 

    public void mouseExited(MouseEvent e) { 
    } 

    public void mouseClicked(MouseEvent e) { 
     label[5].setText("Test 3" + count); 
     count++; 
    } 

    public void mousePressed(MouseEvent e) { 
    } 

    public void mouseReleased(MouseEvent e) { 
    } 

    public void mouseMoved(MouseEvent e) { 
    } 

    public void mouseDragged(MouseEvent e) { 
    } 
} 
+0

1) '..extends JApplet 'Um die Entwicklung/das Testen zu vereinfachen, erstellen Sie einen Hybrid, der auch als Anwendung ausgeführt werden kann. 2) Für bessere Hilfe, post ein [SSCCE] (http://sscce.org/). Generiere die Bilder im Code. –

+0

Das war mein SSCCEE, ich habe einen Schnitt gemacht, damit dieser Code jetzt funktioniert. Der Fehler bleibt bestehen, wenn ich einen translucent.setbackground anstelle von Bildern verwende. Entschuldigung, ich weiß nicht, wie man eine hybride Anwendung bildet ?? –

+0

Für zukünftige Fragen und Bearbeitungen (oder besser, diejenigen von uns, die leiden, sie zu lesen), bitte lernen: 1) Um zu überprüfen, dass die Vorschau unter dem Nachrichten-Posting-Formular aussieht und liest wie Sie erwarten. 2) Wie man Codeformatierung benutzt 3) Wie man Verbindungen einfügt u. Listenpunkte benutzt. - Ich habe gerade die letzten 10 Minuten damit verbracht, das zu säubern, damit es logisch formatiert und gelesen wird. Zum Thema Hybriden. Sehen Sie sich Beiträge an, in denen "hybrid" von [me] (http://stackoverflow.com/search?q=user%3A418556+hybrid) und [trashgod] (http://stackoverflow.com/search?q=user) erwähnt wird % 3A230513 + Hybrid). Wir veröffentlichen oft vollständigen Code. –

Antwort

0

Im mouseClicked Ereignis, fügen Sie "repaint()"

Wenn das nicht funktioniert, versuchen ungültig(), repaint()

public void mouseClicked(MouseEvent e) { 
    label[5].setText("Test 3" + count); 
    count++; 

    //revalidate(); 
    repaint(); 

}