Programing

Swing JDialog에서 "X"버튼 제거

lottogame 2020. 12. 9. 07:40
반응형

Swing JDialog에서 "X"버튼 제거


JDialog제목 표시 줄 에서 닫기 버튼 ( "X")을 제거하는 방법이 있습니까?


를 호출하여 전체 대화 제목을 제거 할 수 dialog.setUndecorated(true)있지만 이는 대화를 더 이상 이동할 수 없음을 의미합니다.

dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)버튼이 어떤 작업 도 수행 하지 않도록 실행할 수도 있습니다 .

그 외에는 X완전히 제거 할 방법이 없다고 생각합니다 .


dialog.setUndecorated(true)제목 표시 줄을 제거하기 위해 전화 할 수 있다고 생각합니다 . 하지만 'X'에 대해서는 확실하지 않습니다.

그러나 사용자가 대화 상자를 쉽게 닫을 수 있기를 원하므로 'X'를 제거하는 것은 좋은 생각이 아닐 수 있습니다.

가장 좋은 방법은 사용자가 또는를 사용하여 'X'를 클릭 할 때 발생하는 일을 제어 dialog.setDefaultCloseOperation하는 것 WindowListener입니다.


Java 1.7 (AKA Dolphin 또는 Java 7)부터는 창에서 닫기 버튼을 비활성화하거나 제거 할 수 없습니다. 를 사용하여 최대화 버튼을 제거 / 비활성화 frame.setResizable(false)할 수 있으며 java.awt.Dialog또는을 (를) 확장하는 클래스를 사용하여 최소화 및 최대화 버튼을 제거 할 수 있습니다 javax.swing.JDialog. 를 사용하여 제목 표시 줄, 테두리 및 단추를 제거 frame.setUndecorated(true)할 수 있으며 frame.setDefaultLookAndFeelDecorated(true), (JFrame 또는 JDialog라고 가정하면 ) 제목 표시 줄에있는 모든 단추의 가시성을 완전히 제어 할 수 있습니다 (일부 플랫폼 간 호환성 및 OS 통합 손실 ). . 이것이 현재 JDK로 가능한 모든 컨트롤입니다.


내 경험은 다음과 같습니다.

  • 사용 시도 setUndecorated(true): 전체를 Dialog보이지 않게 만들었습니다 .
  • 시도 함 setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE): 이것은 동작을 전혀 변경하지 않았습니다. 내 대화 상자가 여전히 닫혔습니다. 에 기본 닫기 작업을 설정 DO_NOTHING_ON_CLOSE받는 위임 닫기 작업을 windowClosing()등록 방법 WindowListener.

나를 위해 일한 것은 다음과 같습니다.

setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
//Remove any existing WindowListeners
for ( WindowListener wl : this.getWindowListeners())
        this.removeWindowListener(wl);
this.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
                 if ("Optional condition") {
                      JOptionPane.showMessageDialog(null, "You cannot close this window");
                 }
        }
});

추측에 따라 PL & F 장식으로 설정하고 구성 요소를 이름으로 제거하십시오.


static public void removeButtons(Component c){
    if (c instanceof AbstractButton){
        String accn = c.getAccessibleContext().getAccessibleName();
        Container p=c.getParent();
        //log.debug("remove button %s from %s",accn,p.getClass().getName());
        c.getParent().remove(c);
    }
    else if (c instanceof Container){
        //log.debug("processing components of %s",c.getClass().getName());
        Component[] comps = ((Container)c).getComponents();
        for(int i = 0; i<comps.length; ++i)
            removeButtons(comps[i]);
    }
}

참고 URL : https://stackoverflow.com/questions/942056/remove-x-button-in-swing-jdialog

반응형