2016-05-04 2 views
0

Итак, у меня есть этот JFrame, содержащий JPanel, и там я добавляю JLabels с информацией, которую хочу, но так как я буду добавлять метки все время, в какой-то момент текст слишком длинный, чтобы появиться, поэтому я хочу добавить полосу прокрутки. В принципе, я хочу сделать свой JFrame с JPanel в нем прокручиваемым. У меня есть этот код, но моя проблема в том, что даже если появится полоса прокрутки, но она не движется и на самом деле не работает, когда текст много, то есть текст все равно вырезается, а полоса прокрутки там не перемещается. Кто-нибудь знает, как это исправить?Как сделать Jframe с прокруткой Jpanel?

import javax.swing.*; 
import java.awt.*; 
import java.util.*; 
public class Bar { 
JFrame info = new JFrame("Information"); 
JLabel ballinf = new JLabel(); 
JPanel contentPane = new JPanel(); 
JScrollPane scrolling = new JScrollPane(); 

public Bar(){ 
    contentPane.setOpaque(true); 
    contentPane.setBackground(Color.WHITE); 
    contentPane.setLayout(null); 

    scrolling = new JScrollPane(contentPane,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 

    info.add(scrolling); 
    info.setSize(750, 600); 
    info.setLocationByPlatform(true); 
    info.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    info.setVisible(true); 
} 

public void adding(int pos){  
    ballinf = new JLabel("Something ",JLabel.CENTER);//assume the text will be bigger here and have more info 
    ballinf.setSize(700, 30); 
    ballinf.setForeground(Color.green); 
    ballinf.setLocation(5, 5+pos); 
    contentPane.add(ballinf); 

    info.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    info.setVisible(true); 
    } 

public static void main(String[] args){ 
    Bar stats = new Bar(); 
    stats.adding(0); 
    stats.adding(20);//this will be done in a for loop for more than 2 times so the text ends up to be a lot 
} 

}

ответ

3
contentPane.setLayout(null); 

Не используйте нулевой макет !!!

Необходимо использовать соответствующий менеджер компоновки. Прочтите раздел из учебника Swing по телефону Layout Managers для получения дополнительной информации и рабочих примеров. Затем менеджер компоновки определит предпочтительный размер панели при добавлении компонентов в панель.

Затем прокрутка будет отображать полосы прокрутки, когда это необходимо.

Если вы динамически добавлять компоненты на панели (после того, как GUI видна), то код должен быть что-то вроде:

panel.add(...); 
panel.revalidate(); 
panel.repaint(); 
+0

должны перепроверить и перекрашивать можно назвать? – DarkV1

+0

, так что тогда я должен просто удалить команду setLayout (null)? – helpme

+0

@helpme, вы попробовали? – camickr

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