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.
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();
}
});
}
}
¿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. –
más/menos transparente – nn2
¿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