2016-11-17 4 views
1

Miglayout을 사용하여 프로그램의 레이아웃을 정의하고 있습니다. 문제는 JScrollPane이 JButton의 기본 크기보다 작아지는 것을 방지합니다. JButton의 최소, 기본 및 최대 너비는 "w 300:600:900" //min:pref:max과 같이 설정됩니다.JScrollPane은 컴포넌트가 원하는 크기보다 작아지는 것을 방지합니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

SSSCE

import java.awt.*; 
import javax.swing.*; 
import net.miginfocom.swing.MigLayout; 

public class ButLay extends JFrame { 

    private ButLay() { 
     super("Button Layout"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new MigLayout("", "grow", "grow")); 
     createPanel(); 
     setSize(800, 200); 
     setVisible(true); 
    } 

    JPanel panel = new JPanel(new MigLayout("", "grow", "grow")); 
    JScrollPane scroll; 
    JButton button = new JButton("Button"); 

    private void createPanel() { 
     panel.add(button, "gapleft 100, align right, w 300:600:900, south"); 
     scroll = new JScrollPane(panel); 
     getContentPane().add(scroll, "grow"); 
    } 

    public static void main(String[] args) { 
     new ButLay(); 
    } 
} 

답변

3

JScrollPane의 디폴트의 동작은 필요에 따라 스크롤 바를 표시 할 수 있도록 바람직한 크기 스크롤 창에서 구성 요소를 표시한다.

동작을 변경하려면 패널에 Scrollable 인터페이스를 구현할 수 있습니다. getScrollableTracksViewportWidth() 메서드를 재정 의하여 true을 반환 할 수 있습니다. 이제 스크롤 패널의 뷰포트 크기가 조정되면 패널의 크기가 조정됩니다. 그러나이 방법을 사용하면 뷰포트를 너무 작게 만들면 스크롤바가 생기지 않습니다.

위의 상황에서 스크롤 막대를 사용하려면 preferredSize가 뷰포트의 크기보다 클 때 최소 크기를 반환하려면 getPreferredSize() 메서드를 재정의해야 할 수도 있습니다.

Scrollable 인터페이스를 구현하는 Scrollable Panel을 확인하고 몇 가지 편리한 방법으로 동작을 사용자 정의 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 그것을 조사 할 것이다. 그러나 JButton이 JScrollPane에있을 필요가 없다는 것을 깨달았을 때 JFrame의 남쪽으로 도킹 시켰습니다. – Dan

관련 문제