2010-08-19 77 views
5

我有一個JTextArea,它騎在JScrollPane的ontop上。無論如何,我知道我可以使用getViewPort()方法來設置視圖端口的不透明度......但似乎無法找到任何跡象表明如何......在任何地方。 :SJava - 透明JScrollPane

這是我到目前爲止有:

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

你們是不是要設置您的滾動窗格中的不透明度(即使它增加/減少看穿),或者是你想只是使它顯示/隱藏?如果是後者,那麼我認爲你不需要使用視口來做到這一點。 – 2010-08-19 00:19:20

+0

更多/更少透明 – nn2 2010-08-19 00:30:16

+0

你的SSCCE(http://sscce.org)在哪裏顯示你到目前爲止所顯示的內容並顯示你遇到的問題?過去你被要求參加SSCCE。人們浪費太多時間試圖理解你的問題,因爲你無法很好地解釋你的需求。 – camickr 2010-08-19 00:45:44

回答

9

您與@Serplat討論會暗示你可能會混淆不透明透明度

Opacity是用於優化繪圖Swing組件的布爾屬性:

  • true:組件同意油漆全部包含在其矩形邊界內的位的。
  • false:組件不能保證在其矩形範圍內繪製所有的位。

Transparency是一種合成數字圖像的方法,如在此example中所見。

考慮到區別可能有助於澄清您的問題或集中您的搜索以獲取更多信息。

附錄:基於@ camickr的example,下面的示例顯示了一個藍色方塊,它「粘」到視口,而灰色棋盤可能會在其上滾動。

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

其實,我希望我可以在JScrollPane的背景上使用圖像......因爲我無法真正設置不透明度......但是,謝謝 – nn2 2010-08-19 02:40:08

+1

@Dan:的確,_opacity_可以打開或關閉。我在上面添加了一個例子,可能會提出一個前進方向。 – trashgod 2010-08-19 02:56:25

+0

另請參閱此相關的[答案](http://stackoverflow.com/a/10097538/230513)。 – trashgod 2012-11-07 05:37:56

20

您需要使用setOpaque(false),使之透明。在JScrollPane和它的ViewPort上調用它們。

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

您還可以撥打setOpaque(false)在JTextArea中,如果你想要一個透明的爲好。

+0

我可不只是......這個詞是什麼......將透明度設置爲某個數字? – nn2 2010-08-19 00:25:25

+0

獲取errros ...這是我的: sp.setOpaque(false); \t sp.getViewPort()。setOpaque(false); \t c.setOpaque(false); 這裏是我的錯誤: C:\ WAMP \ WWW \ mystikrpg \ tileGen.java:572:找不到符號 符號:方法getViewPort() 位置:類javax.swing.JScrollPane \t sp.getViewPort() .setOpaque(假); \t^ 1錯誤 工具退出碼1 怪異 – nn2 2010-08-19 00:29:48

+0

哦完成後,要設置不透明度。我不認爲用JScrollPanes是可能的。 據我所知,你必須是完全透明的或強制性的不透明。 – Serplat 2010-08-19 00:29:59

2

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