Java 24

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

LocalDateTime Long 변환

사용하는 환경이 UTC인지 아닌지에 따라서 달라진다.UTC를 사용하면 시스템 환경을 신경 쓸 필요가 없다. 중요한 건 LocalDateTime -> Long -> LocalDateTime 변환 시 동일한 방식으로 변환을 해야 한다.//이 시간은 KSTLocalDateTime dt = LocalDateTime.now();Date d = new Date();System.out.println("Date: " + d);System.out.println("DateToLong(밀리세컨드제거): " + d.getTime() / 1000);System.out.println("systemDefault: " + ZoneId.systemDefault()); //시스템 시간 구분은 이걸로System.out.println("L..

Java 2026.01.11

log4j2.xml 샘플

작성을 직접하고 주석은 GPT가 잘 적어줘서 그걸로 하고 일부는 수정. 추가 설명Configuration status의 info는 log4j2에 발생하는 log (debug로 해보면 알 수 있다), 실제 level은 Root level 에서 지정debug 이상은 console이고 나머지는 info, warn, error 레벨별로 파일로 생성되게 처리 info, warn은 파일 최대 레벨 10MB로 10MB가 넘어가면 최대 5개까지 압축한다. 이후는 과거순부터 덮는다.error는 하루 기준으로 압축이 되고 용량 제한 등은 없다. 패키지로 구분되는 로그는 샘플용이다. ..

Java 2025.09.21

Java jar 윈도우 서비스 등록하기

2개 버전 테스트Eclipse Adoptium jdk-8.0.412.8-hotspot, 윈도우 11JDK 1.8 202, 윈도우 서버 2019WinSW(WinSW.NET4.exe) v.2.12.0 Spring Tool Suite 4 Version: 4.13.0.RELEASE 1. apache common daemon자료가 많이 없다. 2. nssm블로그에 참고 자료가 매우 많고 무난하게 사용하기 좋아보였다.Bugs in nssm can cause severe issues such as excessive CPU usage, memory exhaustion, data loss and even bluescreens. CPU, 메모리, 블루스크린 등의 버그가 생길 수도 있다고 하는데 중요한 서버라서 문제가 생길..

Java 2024.12.22