Полоса прокрутки отсутствует для JPanel в JScrollPane - PullRequest
2 голосов
/ 16 февраля 2012

У меня есть 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

1 Ответ

6 голосов
/ 16 февраля 2012

Вызовите setPreferredSize () для панели в JScrollPane.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...