JSplitPane은 JComponent 클래스의 하위 클래스로, 두 개의 컴포넌트를 하나의 패널 안에 수평 또는 수직 방향으로 나란히 배치할 수 있게 해주는 Swing 컴포넌트입니다. 사용자는 런타임에 구분선(divider)을 드래그하여 각 컴포넌트의 표시 영역 크기를 자유롭게 조절할 수 있습니다.
JSplitPane의 주요 메서드로는 remove(), removeAll(), resetToPreferredSizes(), setDividerLocation() 등이 있으며, PropertyChangeListener 인터페이스를 등록하면 분할 위치 변경과 같은 속성 변화 이벤트도 감지할 수 있습니다.
이 글에서는 왼쪽 버튼과 오른쪽 버튼에 ActionListener를 등록한 뒤, 버튼 클릭 시 해당하는 쪽(왼쪽 또는 오른쪽) 패널을 프로그래밍 방식으로 숨기고, 다시 클릭하면 원래 상태로 복원하는 방법을 예제와 함께 살펴보겠습니다.
예제 코드
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JSplitPaneHideTest extends JFrame {
private JButton leftBtn, rightBtn;
private JSplitPane jsp;
public JSplitPaneHideTest() {
setTitle("JSplitPaneHide Test");
leftBtn = new JButton("Left Button");
rightBtn = new JButton("Right Button");
jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftBtn, rightBtn);
jsp.setResizeWeight(0.5);
// 왼쪽 또는 오른쪽 패널을 숨기는 구현 코드
ActionListener actionListener = new ActionListener() {
private int loc = 0;
public void actionPerformed(ActionEvent ae) {
JButton source = (JButton) ae.getSource();
if (jsp.getLeftComponent().isVisible() && jsp.getRightComponent().isVisible()) {
loc = jsp.getDividerLocation();
jsp.setDividerSize(0);
jsp.getLeftComponent().setVisible(source == leftBtn);
jsp.getRightComponent().setVisible(source == rightBtn);
} else {
jsp.getLeftComponent().setVisible(true);
jsp.getRightComponent().setVisible(true);
jsp.setDividerLocation(loc);
jsp.setDividerSize((Integer) UIManager.get("SplitPane.dividerSize"));
}
}
};
rightBtn.addActionListener(actionListener);
leftBtn.addActionListener(actionListener);
add(jsp, BorderLayout.CENTER);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JSplitPaneHideTest();
}
}
핵심 동작 방식
- 두 컴포넌트가 모두 보이는 상태에서 버튼을 클릭하면, 먼저 현재 분할 위치를 변수에 저장하고
setDividerSize(0)으로 구분선을 숨긴 뒤, 클릭된 버튼이 아닌 반대쪽 컴포넌트를setVisible(false)로 숨깁니다. - 한쪽이 이미 숨겨진 상태에서 버튼을 다시 클릭하면, 두 컴포넌트를 모두 다시 표시하고 저장해 둔 위치로 분할선을 복원하며, 구분선 크기도
UIManager의 기본값으로 되돌립니다.
실행 결과
프로그램을 실행하면 처음에는 왼쪽 버튼과 오른쪽 버튼이 분할선을 기준으로 나란히 표시됩니다. 버튼을 클릭하면 반대쪽 패널이 숨겨지고, 숨겨진 상태에서 다시 클릭하면 원래의 분할 상태로 복원되는 것을 확인할 수 있습니다.


