У меня есть JFrame, который содержит и JScrollPane.Сам JScrollPane содержит класс, производный от JPanel.Я использую класс JPanel для рисования изображения и некоторых других примитивов.К сожалению, полосы прокрутки JScrollPane не появляются, даже если JPanel распространяется на размер JSrollPane.
Я создал некоторый тестовый код, который запускается:
Это основной класс:
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);
}
}
}
Интересно, что полосы прокрутки появляются, если я просто вставляю JLabel с и Image в 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);
}
Я бы оценил, если бы вы могли рассказать, как я могу заставить полосы прокрутки появляться, если я использую JPanel в JScrollPane.
Regards & Thanks Marc