2017-01-03 7 views
-2

У меня есть класс, который расширяет JPanel, где я переопределил метод paintComponent(Graphics g). Однако я не вижу прямоугольников или полос прокрутки, которые я нарисовал.Как сделать JPanel прокручиваемым в Java?

В основной функции у меня есть следующий код ниже:

MyClass mainPanel = new MyClass(); 
    mainPanel.setPreferredSize(new Dimension(1000, 1000)); 
    mainPanel.setLayout(new BorderLayout()); 

    JPanel scrollPanel = new JPanel(); 
    scrollPanel.setSize(new Dimension(2000, 2000));  
    JScrollPane scrollPane = new JScrollPane(scrollPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //Let all scrollPanel has scroll bars 
    scrollPane.setViewportView(scrollPanel); 
    scrollPane.setOpaque(true); 

    scrollPanel.revalidate(); 
    mainPanel.add(scrollPane); 


    JFrame frame = new JFrame("Scrollable Panel"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(mainPanel); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
+0

Имейте ваш прочитать [официальный путеводитель] (https://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html) – AxelH

+2

Try 'scrollPanel.setPreferredSize (новое измерение (2000, 2000)); '. В настоящее время ваш 'scrollPanel' сжимается до нуля, поэтому' scrollPane' не нужно показывать полосы прокрутки. – khelwood

+1

@ Нимрод Аргов, прочитайте его код, у него есть один. – AxelH

ответ

0

Я решил эту проблему. MyClass расширяет JPanel. И я перезаписал метод paintComponent (Graphics g), в котором я рисую прямоугольники через Graphics.

MyClass mainPanel = new MyClass() 
mainPanel.setPreferredSize(new Dimension(7000, 1000)); 
mainPanel.setLayout(new BorderLayout()); 

JScrollPane scrollPane = new JScrollPane(mainPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //Let all scrollPanel has scroll bars 
scrollPane.setPreferredSize(new Dimension(1000, 900)); 


JFrame frame = new JFrame("Scrollable JPanel"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.add(scrollPane); 
frame.setSize(1000, 900); 
frame.pack(); 
frame.setLocationRelativeTo(null); 
frame.setVisible(true); 
Смежные вопросы