2010-08-19 81 views
5

Tengo un JTextArea y está montado sobre un JScrollPane. De todos modos, sé que puedo usar el método getViewPort() para configurar el opaco del puerto de vista ... pero parece que no puedo encontrar ningún signo de cómo hacerlo ... en ningún lado. : SJava - Transparent JScrollPane

Esto es lo que tengo hasta ahora:

if (e.getKeyCode() == KeyEvent.VK_F) 
{ 
    if (sp.isVisible()) 
    { 
     sp.setVisible(false); 
    } 
    else 
    { 
     sp.setVisible(true); 
    } 
} 
+0

¿Estás tratando de establecer la opacidad de su panel de desplazamiento (es decir, lo que es más/menos transparente), o está tratando de simplemente hacer que sea visible/invisible? Si es este último, entonces no creo que necesite usar la ventana gráfica para hacer eso. –

+0

más/menos transparente – nn2

+0

¿Dónde está su SSCCE (http://sscce.org) que muestra lo que tiene hasta ahora y muestra los problemas que está teniendo? Le han pedido un SSCCE en el pasado. La gente está perdiendo demasiado tiempo tratando de entender su pregunta, ya que no puede explicar su necesidad muy bien. – camickr

Respuesta

9

Su coloquio con @Serplat sugiere que es posible que se de confusión la opacidad y la transparencia .

Opacity es una propiedad booleana de los componentes Swing utilizados para optimizar el dibujo:

  • true: El componente de acuerdo a pintar todos los bits contenidos dentro de sus límites rectangulares.
  • false: El componente no garantiza que se pintarán todos los bits dentro de sus límites rectangulares.

Transparency es un medio para componer imágenes digitales, como se ve en este example.

Tener en cuenta la distinción puede ayudar a aclarar su pregunta o centrar su búsqueda para obtener más información.

Addendum: Basado en @ camickr's example, el ejemplo siguiente muestra un cuadrado azul que "se pega" a la ventana gráfica, mientras que el tablero gris puede desplazarse sobre él.

ScrollPanePaint

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

/** @see https://stackoverflow.com/questions/2846497 */ 
public class ScrollPanePaint extends JFrame { 

    private static final int TILE = 64; 

    public ScrollPanePaint() { 
     JViewport viewport = new MyViewport(); 
     viewport.setView(new MyPanel()); 
     JScrollPane scrollPane = new JScrollPane(); 
     scrollPane.setViewport(viewport); 
     this.add(scrollPane); 
     this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
     this.pack(); 
     this.setLocationRelativeTo(null); 
     this.setVisible(true); 
    } 

    private static class MyViewport extends JViewport { 

     public MyViewport() { 
      this.setOpaque(false); 
      this.setPreferredSize(new Dimension(6 * TILE, 6 * TILE)); 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.setColor(Color.blue); 
      g.fillRect(TILE, TILE, 3 * TILE, 3 * TILE); 
     } 
    } 

    private static class MyPanel extends JPanel { 

     public MyPanel() { 
      this.setOpaque(false); 
      this.setPreferredSize(new Dimension(9 * TILE, 9 * TILE)); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.setColor(Color.lightGray); 
      int w = this.getWidth()/TILE + 1; 
      int h = this.getHeight()/TILE + 1; 
      for (int row = 0; row < h; row++) { 
       for (int col = 0; col < w; col++) { 
        if ((row + col) % 2 == 0) { 
         g.fillRect(col * TILE, row * TILE, TILE, TILE); 
        } 
       } 
      } 
     } 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new ScrollPanePaint(); 
      } 
     }); 
    } 
} 
+0

En realidad, esperaba poder usar la Imagen en un ANTECEDENTE de un JScrollPane ... ya que realmente no puedo establecer la opacidad ... pero gracias – nn2

+1

@Dan: De hecho, _opacity_ está activado o desactivado. Agregué un ejemplo anterior que puede sugerir un camino a seguir. – trashgod

+0

Consulte también este relacionado [respuesta] (http://stackoverflow.com/a/10097538/230513). – trashgod

20

Es necesario utilizar setOpaque(false) para hacerlo transparente. Llámalo tanto en JScrollPane, como en ViewPort.

 
sp.setOpaque(false); 
sp.getViewport().setOpaque(false); 

También tendrá que llamar setOpaque(false) en el JTextArea, si quieres que transparentes también.

+0

¿No puedo simplemente ... cuál es la palabra ... establecer la transparencia a un cierto número? – nn2

+0

Obteniendo errores ... esto es lo que tengo: sp.setOpaque (false); \t sp.getViewPort(). SetOpaque (falso); \t c.setOpaque (falso); y aquí está mi error: C: \ wamp \ www \ mystikrpg \ tileGen.java: 572: no se puede encontrar el símbolo símbolo : Método getViewPort() ubicación: clase javax.swing.JScrollPane \t sp.getViewPort() .setOpaque (falso); \t^ 1 error herramienta completa con código de salida 1 raro – nn2

+0

Oh, que desea establecer la opacidad. No creo que eso sea posible con JScrollPanes. Por lo que sé, tienes que ser completamente transparente u opaco. – Serplat

2

Código de JScrollPane el fondo transparente.

JScrollPane scrollPane = new JScrollPane(); 

    JViewport viewport = new JViewport(); 


//Component that need to be added in Scroll pane// 

    viewport.setView(new JPanel()); 

    viewport.setOpaque(false); 

    scrollPane.setViewport(viewport); 

    scrollPane.getViewport().setOpaque(false); 

    scrollPane.setOpaque(false); 

// Add Scrollpane to Jframe or JPanel// 

    add(scrollPane,BorderLayout.CENTER); 
Cuestiones relacionadas