2012-07-30 21 views
5

Este ejemplo compila bien. Y se puede ver al ejecutarlo, el problema que estoy enfrentando. Quiero que los JPanels pinten directamente en el escritorio, sin un panel de contenido de JWindow visible. ¡También necesito un JScrollpane para ser visible para poder desplazar horizontalmente la matriz de JPanel!Java: ¿cómo hacer que el fondo Jscrollpane del contenedor no sea opaco? (es decir, transparente)

Agradecer cualquier ayuda.

/* 
* 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 para [sscce] (http://sscce.org/). – trashgod

Respuesta

13

darle una oportunidad:

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

Ahhhhhh -----> ¡¡Bonito !! Trabajando como la magia ahora, :))))))))) – aubreybourke

+0

@aubreybourke que es increíble, tal vez le gustaría mostrar su solicitud marcando la pregunta como respondida para que Xon pueda revivir el reconocimiento que se merece;) – MadProgrammer

+0

@aubreybourke: Hay un ejemplo relacionado [aquí] (http://stackoverflow.com/a/3518047/230513). Puede aceptar esta respuesta haciendo clic en [marca de verificación vacía] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) a la izquierda. – trashgod

Cuestiones relacionadas