JOptionPane의 좌상 구석의 클로즈드 x를 무효화하고 싶습니다만, 어떻게하면 좋습니까?JOptionPane의 클로즈 x를 무효화하는 방법
4
A
답변
1
사용자가 옵션을 선택하지 않고 닫으려고 할 때 항상 대화 상자를 다시 표시 할 수 있습니다. sun.com에서 기본 닫기 동작을 재정의하는 방법에 대한 예가 있습니다. "중지 자동 대화 상자 닫기"에서보고들은 다음과 같은 코드가 있습니다 만 수에
final JOptionPane optionPane = new JOptionPane(
"The only way to close this dialog is by\n"
+ "pressing one of the following buttons.\n"
+ "Do you understand?",
JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION);
final JDialog dialog = new JDialog(frame,
"Click a button",
true);
dialog.setContentPane(optionPane);
dialog.setDefaultCloseOperation(
JDialog.DO_NOTHING_ON_CLOSE);
dialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
setLabel("Thwarted user attempt to close window.");
}
});
optionPane.addPropertyChangeListener(
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
String prop = e.getPropertyName();
if (dialog.isVisible()
&& (e.getSource() == optionPane)
&& (prop.equals(JOptionPane.VALUE_PROPERTY))) {
//If you were going to check something
//before closing the window, you'd do
//it here.
dialog.setVisible(false);
}
}
});
dialog.pack();
dialog.setVisible(true);
int value = ((Integer)optionPane.getValue()).intValue();
if (value == JOptionPane.YES_OPTION) {
setLabel("Good.");
} else if (value == JOptionPane.NO_OPTION) {
setLabel("Try using the window decorations "
+ "to close the non-auto-closing dialog. "
+ "You can't!");
}
그 코드를 사용하여, 당신은 쉽게 사용자가 사용할 수 중 하나를 클릭 할 때 창을 닫아야 주석 부분을 적용 할 수 옵션이 아니라 닫는 버튼.
0
JOptionPane
에서이를 수행 할 방법이 있는지 확실하지 않습니다.
일반적으로 JOptionPane이 제공하는 것보다 더 많은 유연성을 원할 때 (기본적으로 몇 개의 대화 상자에 대한 정적 팩키지), JDialog
을 사용하여 자체 대화 상자를 작성합니다.
JDialog는 상속 된 메서드 setUndecorated
을 제공하므로 X을 모두 제거합니다. 더 많은 작업이 필요하지만 원하는대로 대화 상자를 만들 수 있습니다.
3
마이클,
닫기 [x] 버튼을 비활성화하는 방법을 모르겠습니다. 또는 사용자가 클릭 할 때 아무 것도 할 수 없습니다. 아래 코드를 확인하십시오 :
JOptionPane pane = new JOptionPane("message");
JDialog dialog = pane.createDialog(null, "Title");
dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
dialog.setVisible(true);
적합합니까?
2
당신은있는 JOptionPane에 선언 취소 버튼을하여 종료 버튼을 덮어하고 그에 따라 취소 작업을 처리 할 수
JOptionPane optionPane= new JOptionPane("message", JOptionPane.OK_CANCEL_OPTION);
final JDialog dialog = optionPane.createDialog(null, "Input");
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
dialog.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent e) {
optionPane.setValue(JOptionPane.CANCEL_OPTION);
}
});
if (JOptionPane.CANCEL_OPTION!= ((Integer) optionPane.getValue()).intValue())
throw new myCancellationException();
가 왜 그렇게 하시겠습니까? JOptionPane에는 일반적으로 "Cancel"또는 "No"버튼이 있어야합니다. 닫기 버튼을 누르면 해당 버튼과 일관되게 동작해야합니다. – ykaganovich
나는 ykaganovich와 동의해야한다. 이것은 사용자 경험 관점에서 나쁜 생각처럼 보입니다. 사용자가 옵션을 선택하지 않은 경우 아마도 a) 아무 것도하지 않거나 b) 적절한 기본값을 선택하는 것이 좋습니다. – ssakl
내가 정말로하고 싶은 질문을 잘못 설명했을 수도 있습니다. 닫기 버튼을 없애는 것입니다 (이것이 사과 인간 인터페이스 가이드 라인에서 제안하는 것이며 내 사장님은 HIG와 사랑에 빠졌습니다). 결국에는 닫기 버튼에 취소 버튼과 동일한 기능을 부여하는 것이 더 쉬워 져서 이것이 내가 한 일입니다. 감사. – Mike2012