2012-02-16 13 views
2

JScrollPaneとJScrollPaneを保持しています。 JScrollPane自体は、JPanelから派生したクラスを保持します。 JPanelクラスを使用して、Imageやその他のプリミティブを描画します。残念ながら、JPanelがJSrollPaneのサイズを超えていても、JScrollPaneのスクロールバーは表示されません。JScrollPaneのJPanelにスクロールバーが表示されない

私は走るいくつかのテストコード作成:これは、メインクラスです

を:

import java.awt.BorderLayout; 
import java.awt.Color; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 

class ScrolledPane extends JFrame{ 

private JScrollPane scrollPane; 

public ScrolledPane() 
{ 
    setTitle("Scrolling Pane Application"); 
    setSize(300, 200); 
    setBackground(Color.gray); 

    TestPanel testPanel = new TestPanel(); 
    testPanel.setLayout(new BorderLayout()); 

    scrollPane = new JScrollPane(testPanel); 
    this.getContentPane().add(scrollPane, BorderLayout.CENTER); 
} 


public static void main(String args[]) 
{ 
    // Create an instance of the test application 
    ScrolledPane mainFrame = new ScrolledPane(); 
    mainFrame.setVisible(true); 
} 
} 

そして、ここではJPanelのから派生したクラスのコードです:興味深いことに

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.Toolkit; 

import javax.swing.JPanel; 

public class TestPanel extends JPanel { 

private Image groundPlan; 

public TestPanel(){ 
    super(); 

    this.setBackground(Color.green); 
    this.setLayout(new BorderLayout()); 
    this.groundPlan = Toolkit.getDefaultToolkit().getImage("D:\\EclipseWorkspace\\img.png"); 
} 


public void paint(Graphics graphics) { 
    super.paint(graphics); 
    if(groundPlan != null) { 
     graphics.drawImage(groundPlan, 0, 0, this); 
    } 
} 
} 

JPanelではなくJScrollpaneにImageを付けてJLabelを挿入するだけでスクロールバーが表示されます。ここでは、このオプションのコード:あなたは私はJScrollPaneの中でのJPanelを使用した場合、スクロールバーが発生することができますどのように伝えることができれば

public ScrolledPane() //Frame <- Scrollpane <- label <- image 
{ 
    setTitle("Scrolling Pane Application"); 
    setSize(300, 200); 
    setBackground(Color.gray); 

    JPanel topPanel = new JPanel(); 
    topPanel.setLayout(new BorderLayout()); 

    Icon image = new ImageIcon("D:\\EclipseWorkspace\\img.png"); 
    JLabel label = new JLabel(image); 

    scrollPane = new JScrollPane(); 
    scrollPane.getViewport().add(label); 
    this.getContentPane().add(scrollPane, BorderLayout.CENTER); 
} 

私はappriciateでしょう。 JScrollPaneの中にパネルの

よろしく&おかげ マルク

+2

1) 'JPanel'で' paint() 'をオーバーライドしないでください。 'paintComponent()'を使用してください。 2)フレームを伸ばさないでください。 3)ラベルを追加できるときに、カスタムペイントするのはなぜですか? –

答えて

6

コールsetPreferredSize()。

+0

10Kのおめでとう。 :) –

+0

ありがとう!それらのいくつかはあなたの投票です:-) – StanislavL

関連する問題