2012-07-30 9 views
5

Dieses Beispiel kompiliert fein. Und Sie können sehen, von dem es läuft, das Problem, dem ich gegenüberstehe. Ich möchte die JPanels direkt auf dem Desktop malen, ohne einen sichtbaren JWindow Inhaltsbereich. Ich brauche auch eine JScrollpane, um sichtbar zu sein, um horizontal durch das JPanel-Array zu schalten!Java: Wie mache ich den Jscrollpane-Hintergrund des Containers undurchsichtig? (dh. transparent)

Schätzen Sie jede Hilfe.

/* 
* SSCE.java 
* Short Self Contained Example 
* 
* Problem: Cant make the containers scrollpane non-opaque! (ie. transparent) 
*/ 
package fb; 

import com.sun.awt.AWTUtilities; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.Toolkit; 
import javax.swing.BorderFactory; 
import javax.swing.JEditorPane; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JWindow; 
import javax.swing.ScrollPaneConstants; 

/** 
* 
* @author Aubrey 
*/ 
public class SSCE { 
    JWindow w = new JWindow(); 
    Container c = w.getContentPane(); 
    JPanel[] ps; 
    Toolkit toolkit = Toolkit.getDefaultToolkit(); 
    Dimension dim = toolkit.getScreenSize(); 
    int width = dim.width; 
    int height= dim.height; 

    public SSCE(){ 
    c.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 5)); 

    JScrollPane scrollPane = new JScrollPane(c); 
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); 
    scrollPane.setOpaque(false); 
    ps = new JPanel[19]; 

    for(int i=0; i<19; i++){ 
    ps[i]=new JPanel(); 
    ps[i].setLocation(0, 0); 
    ps[i].setSize(400, 400); 
    ps[i].setVisible(true); 
    JEditorPane area = new JEditorPane(); 
    area.setEditable(false); 
    area.setOpaque(false); 
    area.setSize(400, 400); 
    area.setForeground(Color.WHITE); 

    area.setText("Date: \nFrom: \n\nMessage: "+i); 

    ps[i].add(area); 
    ps[i].setBorder(BorderFactory.createLineBorder(Color.GRAY)); 
    ps[i].setBackground(Color.darkGray); 
    c.add(ps[i]); 

    } 
    if (AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.TRANSLUCENT)) { 
System.out.println("TranslucencySupported !!!!"); 
AWTUtilities.setWindowOpaque(w, false); 

}else{System.out.println("Translucency NOT Supported !!!!");} 

    //Problem seems to be here --> either the scrollPane or the Container is not non-opaque (ie. transparent)! HOW TO FIX THIS?? 
    w.setContentPane(scrollPane); 
    w.setLocation(0,height-490); 
    w.setSize(width, 450); 

    w.setVisible(true);     
} 
    public static void main(String[] args){ 

     new SSCE(); 
    }} 
+0

+1 für [sscce] (http://sscce.org/). – trashgod

Antwort

13

es versuchen:

scrollPane.getViewport().setOpaque(false); 
    scrollPane.setBorder(null); 
+0

Ahhhhhh -----> Nice One !!!! Arbeiten wie Magie jetzt :))))))))) – aubreybourke

+0

@ aubreybourke das ist genial, vielleicht möchten Sie Ihre Bewerbung zeigen, indem Sie die Frage als beantwortet markieren, damit Xon die Anerkennung wiederbeleben kann, die er verdient;) – MadProgrammer

+0

@aubreybourke: There's ein verwandtes Beispiel [hier] (http://stackoverflow.com/a/3518047/230513). Sie können diese Antwort akzeptieren, indem Sie links auf das [leere Häkchen] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) klicken. – trashgod

Verwandte Themen