Java – Transparente JScrollPane

Ich habe eine JTextArea und fahre auf einer JScrollPane. Wie auch immer, ich weiß, dass ich die getViewPort() Methode benutzen kann, um das undurchsichtige vom Ansichtsport zu setzen … aber ich finde nicht, irgendein Zeichen zu finden, wie man das macht … überall. : S

Hier ist, was ich bisher habe:

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

Ihr Gespräch mit @Serplat deutet darauf hin, dass Sie die Opazität und Transparenz beeinträchtigen könnten.

Deckkraft ist eine boolesche Eigenschaft von Swing-Komponenten, die zum Optimieren des Zeichnens verwendet werden:

  • true : Die Komponente stimmt überein, alle Bits innerhalb ihrer rechteckigen Grenzen zu zeichnen.
  • false : Die Komponente gibt keine Garantie dafür, alle Bits innerhalb ihrer rechteckigen Grenzen zu zeichnen.

Transparenz ist ein Mittel zum Zusammensetzen digitaler Bilder, wie in diesem Beispiel gezeigt .

In Anbetracht der Unterscheidung kann es hilfreich sein, Ihre Frage zu klären oder Ihre Suche nach weiteren Informationen zu fokussieren.

Nachtrag: Basierend auf dem Beispiel von @ camickr zeigt das Beispiel unten ein blaues Quadrat, das an das Ansichtsfenster “klebt”, während das graue Schachbrett darüber gescrollt werden kann.

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

Sie müssen setOpaque(false) , um es transparent zu machen. Rufen Sie das sowohl auf dem JScrollPane als auch auf seinem ViewPort auf.

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

Sie müssen auch setOpaque(false) auf der JTextArea aufrufen, wenn Sie das auch transparent wollen.

Code für JScrollpane Transparenter Hintergrund.

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