2016-05-04 10 views
0

So habe ich diese JFrame, die ein JPanel enthält und darin JLabels mit Informationen hinzufügen, die ich will, aber da ich die ganze Zeit Beschriftungen hinzufügen wird, ist der Text zu lang, so dass ich eine Bildlaufleiste hinzufügen möchte. Grundsätzlich möchte ich meinen JFrame mit einem JPanel darin scrollbar machen. Ich habe diesen Code, aber mein Problem ist, dass, obwohl die Bildlaufleiste erscheint, aber es nicht bewegt und nicht wirklich funktioniert, wenn der Text viel ist, was bedeutet, dass der Text noch ausgeschnitten wird und die Bildlaufleiste dort nicht bewegt. Kann jemand das beheben?Wie mache ich einen Jframe, der ein Jpanel scrollbar enthält?

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 
} 

}

Antwort

3
contentPane.setLayout(null); 

Sie ein Null-Layout nicht verwenden !!!

Sie müssen einen geeigneten Layout-Manager verwenden. Lesen Sie den Abschnitt aus dem Swing-Tutorial unter Layout Managers für weitere Informationen und Arbeitsbeispiele. Der Layout-Manager bestimmt dann beim Hinzufügen von Komponenten zum Panel die bevorzugte Größe des Panels.

Die Bildlaufleiste zeigt dann bei Bedarf die Bildlaufleisten an.

Wenn Sie dynamisch Komponenten zum Panel hinzufügen (nach dem GUI sichtbar ist), dann sollte der Code so etwas wie sein:

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

sollte revalidate und neu streichen genannt werden? – DarkV1

+0

also sollte ich nur den setLayout (null) -Befehl entfernen? – helpme

+0

@helpme, hast du es versucht? – camickr

Verwandte Themen