慕慕森
你与@Serplat的对话表明你可能会混淆不透明度和透明度。Opacity是用于优化绘图的Swing组件的布尔属性:true:组件同意绘制其矩形边界中包含的所有位。false:该组件不保证在其矩形边界内绘制所有位。透明度是一种合成数字图像的方法,如本例所示。考虑到这种区别可能有助于澄清您的问题或集中搜索更多信息。附录:根据@ camickr的示例,下面的示例显示了一个“ 粘贴”到视口的蓝色方块,而灰色棋盘可以在其上滚动。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
for (int col = 0; 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();
}
});
}}