2011-08-02 15 views
0

enter image description hereJScrollPane中有尾隨的圖像

我JScrollPane的內部JPanel並它,每當我試圖滾動。請幫忙! 我該如何解決這個問題?

編輯

JScrollPane pane; 
.... 
pane = new JScrollPane(GC.createGraph()); 
pane.setPreferredSize(new Dimension(480,480*2/3)); 
+0

您的代碼中存在一個錯誤,它會描繪持有的JPanel,例如可能缺少對super.paintComponent(...)或super.paint(...)的調用,但是,如果沒有代碼,我我不確定我們如何幫助你。請考慮創建併發布[sscce](http://sscce.org) –

+0

究竟發生了什麼?即使你滾動100%,你的內容隱藏在下面?向右還是向下? –

+0

向JScrollPane拋出正在運行的JPanel後沒有代碼scrollPane在我嘗試滾動時創建工件。而圖片(完整)應該是一個很大的薄X. –

回答

2

配售事項給別人看的答案。如果你不調用super.paintComponent,你會得到這些工件。例如,

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 

import javax.swing.*; 

public class ScrollPaneArtifacts extends JPanel { 
    private static final int SPA_WIDTH = 600; 
    private static final int SPA_HEIGHT = SPA_WIDTH; 

    @Override 
    protected void paintComponent(Graphics g) { 
     //super.paintComponent(g); 
     g.setColor(Color.red); 
     g.drawLine(0, 0, getWidth(), getHeight()); 
     g.drawLine(getWidth(), 0, 0, getHeight()); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(SPA_WIDTH, SPA_HEIGHT); 
    } 

    private static void createAndShowUI() { 
     JScrollPane scrollpane = new JScrollPane(new ScrollPaneArtifacts()); 
     scrollpane.getViewport().setPreferredSize(new Dimension(400, 400)); 
     JFrame frame = new JFrame("ScrollPaneArtifacts"); 
     frame.getContentPane().add(scrollpane); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowUI(); 
     } 
     }); 
    } 
} 
0

你並不需要調用super.paintComponent方法,你可以簡單地清除該地區,以確保沒有文物留在面板上從以前渲染(其中調用super.paintComponent方法都行)。

@Override 
protected void paintComponent(Graphics g) { 
    g.clearRect(0,0,getWidth(),getHeight()); 
    g.setColor(Color.red); 
    g.drawLine(0, 0, getWidth(), getHeight()); 
    g.drawLine(getWidth(), 0, 0, getHeight()); 
} 

如果你願意,可以在Hovercrafts代碼中試試。