Java – 透明的JScrollPane

我有一个JTextArea,它骑在JScrollPane的顶部。 无论如何,我知道我可以使用getViewPort()方法来设置视图端口的不透明…但我似乎无法find任何迹象表明如何做到这一点…任何地方。 :S

这是我到目前为止:

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

你与@Serplat的讨论表明,你可能混淆了不透明性透明度

不透明度是用于优化绘图的Swing组件的布尔属性:

  • true :组件同意绘制其矩形边界内包含的所有位。
  • false :组件不能保证绘制矩形边界内的所有位。

透明度是合成数字图像的一种手段,如本例所示 。

考虑到区别可能有助于澄清您的问题或重点search更多的信息。

附录:基于@ camickr的例子 ,下面的例子显示了一个蓝色方块“粘”到视口,而灰色棋盘可能会滚动。

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(); } }); } } 

你需要使用setOpaque(false)来使它透明。 调用JScrollPane和ViewPort。

 sp.setOpaque(假);
 。sp.getViewport()setOpaque(假);

你也必须在JTextArea上调用setOpaque(false) ,如果你想要透明的话。

JScrollpane透明背景的代码。

  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);