您與@Serplat討論會暗示你可能會混淆不透明和透明度。
Opacity是用於優化繪圖Swing組件的布爾屬性:
true
:組件同意油漆全部包含在其矩形邊界內的位的。
false
:組件不能保證在其矩形範圍內繪製所有的位。
Transparency是一種合成數字圖像的方法,如在此example中所見。
考慮到區別可能有助於澄清您的問題或集中您的搜索以獲取更多信息。
附錄:基於@ camickr的example,下面的示例顯示了一個藍色方塊,它「粘」到視口,而灰色棋盤可能會在其上滾動。
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();
}
});
}
}
你們是不是要設置您的滾動窗格中的不透明度(即使它增加/減少看穿),或者是你想只是使它顯示/隱藏?如果是後者,那麼我認爲你不需要使用視口來做到這一點。 – 2010-08-19 00:19:20
更多/更少透明 – nn2 2010-08-19 00:30:16
你的SSCCE(http://sscce.org)在哪裏顯示你到目前爲止所顯示的內容並顯示你遇到的問題?過去你被要求參加SSCCE。人們浪費太多時間試圖理解你的問題,因爲你無法很好地解釋你的需求。 – camickr 2010-08-19 00:45:44