Java/Swing 6

Swing JDialog

부모창이 있다면 생성자 파라미터로 넘겨서 사용한다. 보통은 JFrame을 사용하면 충분하고 JDialog와 JFrame 두 화면에서 호출해야 한다면 생성자를 분리하는 게 편하다.추가로 전달할 값이 있다면 생성자 파라미터로 넘기는 것이 낫다. 자식창이 부모의 데이터를 호출하는 방식은 지양해야 한다. public SelectDialog(JFrame owner) { super(owner, "선택 팝업", true); //부모 타이틀 modal setLocationRelativeTo(owner); //부모 가운데 선택 버튼을 클릭했는지 구분자를 두고 JDialog로 종료되면 결과를 가져올 수 있다.dipose가 호출되었지만 JDialog에 접근할 수 있는 상태고 참조가 없어지면 GC 대상으로 처리된다..

Java/Swing 2026.03.08

Swing Overlay

이런 방식이 있다는 설명으로, 실제 사용 시에는 SwingWorker를 같이 사용해야 한다!1. GlassPane작성한 값 Panel을 setGlassPane(buildGlass())로 넣어주고, visible로 사용하면 된다.보여줄 내용이 있으면 적용이 다양하게 적용 가능하다.//생성private JPanel buildGlass() { glass = new JPanel(new GridBagLayout()); glass.setOpaque(false); glass.setCursor(new Cursor(Cursor.WAIT_CURSOR)); glass.addMouseListener(new java.awt.event.MouseAdapter() {}); //뒤쪽 클릭 막기 JLabel..

Java/Swing 2026.03.08

Swing 디자인 layout

BorderLayout, FlowLayout 조합으로 대부분 해결된다.컴포넌트 배치할 수 있는 JFormDesigner나 MigLayout 라이브러리 같은 것들이 있는데, 참고할만한 자료가 많이 없어 간단한 거라면 그리는 게 편하다.다른 레이아웃도 많은데, 정리된 자료가 많아서 실제 사용할 때만 작성할 예정.1. Layout1.1 FlowLayout FlowLayout.LEFT면 왼쪽부터, FlowLayout.RIGHT면 오른쪽부터 정렬된다.생성 시 FlowLayout 파라미터 값으로 컴포넌트 사이의 간격을 조절할 수 있다.private JPanel buildTop() { //hgap: 컴포넌트 사이 좌우 //vgap: 컴포너는 사이 상하 JPanel leftPanel = new JPan..

Java/Swing 2026.03.08

Swing 먼저 알아두면 좋은 내용

- EDT(Event Dispatch Thread)Swing은 Thread Safe 하지 않다. 동시에 UI를 업데이트 하는 경우에 문제가 될 수 있기 때문에 Swing 전용 단일 Thread를 사용해서 처리한다. 무거운 작업 시에는 SwingWorker와 조합해서 사용할 수 있고, 해당 조합에서 주로 쓰게 된다.평소 코드는 EDT에서 실행되기 때문에 컴포넌트 생성, 값 변화를 할 때는 적용하지 않아도 된다.하지만 Thread를 생성해서 사용하는 경우 등은 적용을 해야 한다.특히 컴포넌트를 static 변수로 사용하면 여러 화면에서 접근해서 문제가 생길 수 있으니 사용하지 말아야 한다.SwingUtilities.invokeLater(() -> { label.setText("HI");});SwingU..

Java/Swing 2026.03.08

Swing 시작하기

직접 테스트하고 작업한 내용을 기록했다.자세한 사용법보다는 어떠한 상황에서 어떤 컴포넌트나 레이아웃을 사용했는지, 실제로 어떻게 동작하는지 정도의 기록이다.실제 사용한 것들만 작성하고, 자료가 잘 나오는 내용은 따로 정리하지 않았다. Swing으로 작업한 이유1. 무료버전인 JDK 8 202 버전을 맞춰서 사용해야 했다.2. OpenJDK라는 선택지도 있었지만, openJDK에는 JAVAFX를 기본으로 포함하지 않아 OpenJFX를 별도로 추가해야 했다.

Java/Swing 2026.03.08