2010-08-19 6 views
5

Tôi có một JTextArea và nó cưỡi ontop của một JScrollPane. Dù sao, tôi biết tôi có thể sử dụng phương pháp getViewPort() để đặt độ mờ của cổng xem ... nhưng tôi dường như không thể tìm thấy bất kỳ dấu hiệu nào về cách thực hiện điều đó ... ở bất kỳ đâu. : SJava - Transparent JScrollPane

Dưới đây là những gì tôi có cho đến nay:

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

Bạn đang cố gắng đặt độ mờ của cửa sổ cuộn (tức là làm cho cửa sổ xem ít hơn/ít hơn), hoặc bạn đang cố gắng làm cho nó hiển thị/ẩn? Nếu sau này, sau đó tôi không nghĩ rằng bạn cần phải sử dụng khung nhìn để làm điều đó. –

+0

nhiều hơn/ít hơn xem qua – nn2

+0

SSCCE của bạn (http://sscce.org) cho thấy những gì bạn có cho đến nay và cho thấy những vấn đề bạn đang gặp phải? Bạn đã được yêu cầu một SSCCE trong quá khứ. Mọi người đang lãng phí quá nhiều thời gian cố gắng để hiểu câu hỏi của bạn vì bạn không thể giải thích yêu cầu của bạn rất tốt. – camickr

Trả lời

9

Thông tục của bạn với @Serplat gợi ý rằng bạn có thể gây nhầm lẫn opacityminh bạch.

Opacity là một tài sản boolean của các thành phần Swing sử dụng để tối ưu hóa bản vẽ:

  • true: Thành phần đồng ý để vẽ tất cả các bit chứa trong giới hạn hình chữ nhật của nó.
  • false: Thành phần không đảm bảo về việc vẽ tất cả các bit trong giới hạn hình chữ nhật của nó.

Transparency là phương tiện tổng hợp các hình ảnh kỹ thuật số, như được thấy trong số example này.

Xem xét sự khác biệt có thể giúp làm rõ câu hỏi của bạn hoặc tập trung tìm kiếm của bạn để biết thêm thông tin.

Hợp đồng bổ sung: Dựa trên @ camickr's example, ví dụ bên dưới hiển thị hình vuông màu xanh "gắn" vào chế độ xem trong khi bàn cờ màu xám có thể được cuộn qua nó.

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

Thực ra, tôi đã hy vọng tôi có thể sử dụng Hình ảnh trên BỐI CẢNH của một JScrollPane ... vì tôi thực sự không thể đặt độ mờ ... nhưng cảm ơn – nn2

+1

@Dan: Thật vậy, _opacity_ bật hoặc tắt. Tôi đã thêm một ví dụ ở trên có thể đề xuất một con đường phía trước. – trashgod

+0

Xem thêm [answer] có liên quan này (http://stackoverflow.com/a/10097538/230513). – trashgod

20

Bạn cần phải sử dụng setOpaque(false) để làm cho nó minh bạch. Gọi cả trên JScrollPane và trên ViewPort của nó.

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

Bạn cũng sẽ phải gọi setOpaque(false) trên JTextArea, nếu bạn cũng muốn minh bạch.

+0

Tôi có thể không chỉ ... từ là gì .. đặt độ trong suốt cho một số nhất định? – nn2

+0

Bắt lỗi ... đây là những gì tôi có: sp.setOpaque (sai); \t sp.getViewPort(). SetOpaque (false); \t c.setOpaque (sai); và đây là lỗi của tôi: C: \ wamp \ www \ mystikrpg \ tileGen.java: 572: không thể tìm thấy biểu tượng biểu tượng: Phương pháp getViewPort() vị trí: lớp javax.swing.JScrollPane \t sp.getViewPort() .setOpaque (sai); \t^ 1 lỗi Công cụ hoàn thành với mã thoát 1 lạ – nn2

+0

Ồ, bạn muốn đặt độ mờ. Tôi không nghĩ rằng đó là có thể với JScrollPanes. Theo như tôi biết, bạn phải hoàn toàn trong suốt hoặc mờ đục. – Serplat

2

Mã cho JScrollPane Transparent Background.

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