2012-12-08 2 views
4

아래의 작은 코드를 살펴보십시오. 스크롤 창은 나타나지만 슬라이더는 나타나지 않습니다. 프레임의 크기를 조정하더라도 슬라이더는 그렇지 않습니다. 도와주세요.JFrame에서 JScrollPane을 사용할 수 없습니다.

import javax.swing.*; 
public class sample { 
    static JFrame frame; 
    public static void main(String[] args) { 
     String Msg = "Sample Message To Test Scrolling"; 
     frame = new JFrame("Sample Program"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(600, 600); 
     JPanel panel = new JPanel(); 
     panel.setLayout(null); 

     for (int ypos = 0, i = 0; i < 40; i++) { 
      JLabel label = new JLabel("" + i + " " + Msg); 
      label.setFont(new Font("Courier", Font.BOLD, 12)); 
      panel.add(label); 
      label.setBounds(10, ypos + 5, 
          label.getPreferredSize().width, 
          label.getPreferredSize().height); 
      ypos += label.getPreferredSize().height; 
     } 
     JScrollPane scroll = new JScrollPane(panel, 
           JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
           JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     frame.setLayout(new BorderLayput()); 
     frame.add(scroll); 
     frame.setVisible(true); 
    } 
} 

답변

4

슬라이더는 JScrollPane의 뷰포트에 포함 된 구성 요소가 뷰포트보다 큰 경우에만 나타납니다. 귀하의 게시 된 코드를 기반으로 패널의 크기가 preferredSize에 따라 달라 지므로 왜 컴포넌트가 뷰포트보다 커 보이는지 보지 못합니다. 널 레이아웃.

너는 널 레이아웃을 거의 사용하지 않아야한다. 예를 들어

:

import java.awt.Dimension; 
import java.awt.GridLayout; 

import javax.swing.*; 

public class Sample2 { 
    private static final int PREF_W = 600; 
    private static final int PREF_H = PREF_W; 
    private static final int MAX_ROWS = 400; 
    private static final String TEXT_BODY = "Sample Message To Test Scrolling";; 

    private static void createAndShowGui() { 
     JPanel panel = new JPanel(new GridLayout(0, 1)); 
     panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     for (int i = 0; i < MAX_ROWS; i++) { 
     String text = String.format("%03d %s", i, TEXT_BODY); 
     JLabel label = new JLabel(text); 
     panel.add(label); 
     } 

     JScrollPane scrollPane = new JScrollPane(panel); 
     scrollPane.setPreferredSize(new Dimension(PREF_W, PREF_H)); 

     JFrame frame = new JFrame("Sample2"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(scrollPane); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

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

위대한 선생님. 그것은 효과가 있었다. 당신의 도움을 주셔서 감사합니다. – Manu

관련 문제