2012-02-23 3 views
0

У меня есть JPanel с настраиваемым LayoutManager и пытается его получить внутри JScrollPane, однако панель прокрутки, похоже, не знает, что она должна разрешить прокрутку. Независимо от того, как я устанавливаю предпочтительный размер компонентов (это то, что javadoc для JScrollPane говорит, что это необходимо), это не имеет абсолютно никакого значения. Вот код:JScrollPane не показывает полосы прокрутки

canvas = new JPanel(); 
    JScrollPane scroll = new JScrollPane(); 
    scroll.setViewportView(canvas); 
    scroll.setPreferredSize(new Dimension(924,700)); 
    canvas.setPreferredSize(new Dimension(2000,2000)); 

Прокрутки не отображаются. Контейнер JScrollPane установлен в соответствии с его предпочтительным размером. Я проверил через отладчик, что предпочтительный размер холста на самом деле 2000 x 2000 всегда (LayoutManager обеспечивает это), так что может происходить здесь?

+0

Это прекрасно работает для меня. –

+0

Вы забыли добавить «прокрутку» к любому JFrame или эквивалентному компоненту окон, который вы пытаетесь отобразить? – CodeBlind

ответ

5

Это не совсем ответ, но это демо sscce, который показывает, что снова, ваш код работает для меня:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GradientPaint; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Paint; 
import java.awt.RenderingHints; 

import javax.swing.*; 

public class ScrollBarEg { 
    protected static final Paint GRADIENT_PAINT = new GradientPaint(0, 0, 
     Color.blue, 50, 50, Color.red, true); 

    private static void createAndShowGui() { 
     JPanel mainPanel = new JPanel(); 

     JPanel canvas = new JPanel() { 
     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2 = (Graphics2D) g.create(); 
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
        RenderingHints.VALUE_ANTIALIAS_ON); 
      g2.setPaint(GRADIENT_PAINT); 
      g2.fillOval(0, 0, getWidth(), getHeight()); 
      g2.dispose(); 
     } 
     }; 
     JScrollPane scroll = new JScrollPane(); 
     scroll.setViewportView(canvas); 
     scroll.setPreferredSize(new Dimension(924, 700)); 
     canvas.setPreferredSize(new Dimension(2000, 2000)); 

     mainPanel.add(scroll); 

     JFrame frame = new JFrame("ScrollBar Eg"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

Это говорит мне, что ваша ошибка заключается в другом месте в коде, который вы не опубликовано.

+0

Похож, что ошибка в моем LayoutManager. Спасибо за демонстрацию, помогли много –

+0

@ DanielMaly: добро пожаловать и удачи! –

+0

В конце концов, поместите оператор изменения размера холста в invokeLater(). Не знаю, почему. –

Смежные вопросы