2016-05-04 17 views
0

JPanelを含むこのJFrameを持っていますが、そこにJLabelsに必要な情報が追加されていますが、テキストが長すぎてスクロールバーを追加したくないときにいつでもラベルを追加する予定です。基本的には、JPrameをスクロール可能にしてJFrameを作成したいと考えています。私はこのコードを持っていますが、私の問題は、スクロールバーが表示されても、動かずにテキストがたくさんあるときには実際には機能しません。テキストは切り取られ、スクロールバーは動きません。誰もがこれを修正する方法を知っていますか?Jpanelをスクロール可能なJframeを作成するにはどうすればいいですか?

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); 

ヌルレイアウトを使用しないでください!

適切なレイアウトマネージャを使用する必要があります。詳しくは、Layout ManagersのSwingチュートリアルのセクションを読んでください。レイアウトマネージャは、パネルにコンポーネントを追加するときに、パネルの推奨サイズを決定します。

必要に応じてスクロールバーにスクロールバーが表示されます。

あなたが動的に(GUIが表示された後)パネルにコンポーネントを追加する場合は、コードのようなものでなければなりません:

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

再検証と再描画する必要がありますが呼ばれますか? – DarkV1

+0

それではsetLayout(null)コマンドを削除するだけですか? – helpme

+0

@helpme、試しましたか? – camickr

関連する問題