JavaFX 2.0에서 공통 대화 상자 (오류, 경고, 확인)를 만들고 표시하는 방법은 무엇입니까?
JavaFX 2.0에서 일반적인 대화 상자 (오류, 경고, 확인)를 만들고 표시하려면 어떻게합니까? Dialog
, DialogBox
등의 "표준"클래스를 찾을 수 없습니다 Message
.
최근 릴리스 된 JDK 1.8.0_40 은 JavaFX 대화 상자 , 경고 등에 대한 지원을 추가했습니다 . 예를 들어 확인 대화 상자를 표시하려면 Alert 클래스를 사용합니다.
Alert alert = new Alert(AlertType.CONFIRMATION, "Delete " + selection + " ?", ButtonType.YES, ButtonType.NO, ButtonType.CANCEL);
alert.showAndWait();
if (alert.getResult() == ButtonType.YES) {
//do stuff
}
이 릴리스에 추가 된 클래스 목록은 다음과 같습니다.
- javafx.scene.control.Dialog
- javafx.scene.control.Alert
- javafx.scene.control.TextInputDialog
- javafx.scene.control.ChoiceDialog
편집 : 대화 지원이 JavaFX에 추가되었습니다. https://stackoverflow.com/a/28887273/1054140 참조
2011 년에는 일반적인 대화 지원이 없었습니다. new Stage()
다음 을 만들어 직접 작성해야했습니다 .
Stage dialogStage = new Stage();
dialogStage.initModality(Modality.WINDOW_MODAL);
VBox vbox = new VBox(new Text("Hi"), new Button("Ok."));
vbox.setAlignment(Pos.CENTER);
vbox.setPadding(new Insets(15));
dialogStage.setScene(new Scene(vbox));
dialogStage.show();
최신 정보
공식 표준 대화 상자는 RT-12643 구현의 일부로 릴리스 8u40에서 JavaFX에 제공 됩니다. 이들은 2015 년 3 월경에 최종 릴리스 형식으로 , 현재 JavaFX 개발 저장소의 소스 코드 형식으로 제공 될 것 입니다.
그동안 아래 ControlsFX 솔루션을 사용할 수 있습니다.
ControlsFX 는 JavaFX에서 공통 대화 지원 (오류, 경고, 확인 등)을위한 사실상의 표준 타사 라이브러리입니다.
다른 답변에서 지적한 것처럼 일반적인 대화 상자 지원을 제공하는 다른 타사 라이브러리가 많이 있으며 Sergey의 답변의 샘플 코드를 사용하여 쉽게 자신의 대화 상자를 만들 수 있습니다.
그러나 ControlsFX 는 현재 사용 가능한 최고 품질의 표준 JavaFX 대화 상자를 쉽게 제공 한다고 생각합니다 . 다음은 ControlsFX 설명서의 몇 가지 샘플입니다 .
Sergey가 맞지만, 호출 한 동일한 코드 블록에서 평가를 위해 집에서 만든 대화 상자에서 응답을 받아야하는 경우 .show ()가 아닌 .showAndWait ()를 사용해야합니다. 다음은 Swing의 OptionPane에서 제공되는 몇 가지 대화 상자 유형을 표현한 것입니다.
public class FXOptionPane {
public enum Response { NO, YES, CANCEL };
private static Response buttonSelected = Response.CANCEL;
private static ImageView icon = new ImageView();
static class Dialog extends Stage {
public Dialog( String title, Stage owner, Scene scene, String iconFile ) {
setTitle( title );
initStyle( StageStyle.UTILITY );
initModality( Modality.APPLICATION_MODAL );
initOwner( owner );
setResizable( false );
setScene( scene );
icon.setImage( new Image( getClass().getResourceAsStream( iconFile ) ) );
}
public void showDialog() {
sizeToScene();
centerOnScreen();
showAndWait();
}
}
static class Message extends Text {
public Message( String msg ) {
super( msg );
setWrappingWidth( 250 );
}
}
public static Response showConfirmDialog( Stage owner, String message, String title ) {
VBox vb = new VBox();
Scene scene = new Scene( vb );
final Dialog dial = new Dialog( title, owner, scene, "res/Confirm.png" );
vb.setPadding( new Inset(10,10,10,10) );
vb.setSpacing( 10 );
Button yesButton = new Button( "Yes" );
yesButton.setOnAction( new EventHandler<ActionEvent>() {
@Override public void handle( ActionEvent e ) {
dial.close();
buttonSelected = Response.YES;
}
} );
Button noButton = new Button( "No" );
noButton.setOnAction( new EventHandler<ActionEvent>() {
@Override public void handle( ActionEvent e ) {
dial.close();
buttonSelected = Response.NO;
}
} );
BorderPane bp = new BorderPane();
HBox buttons = new HBox();
buttons.setAlignment( Pos.CENTER );
buttons.setSpacing( 10 );
buttons.getChildren().addAll( yesButton, noButton );
bp.setCenter( buttons );
HBox msg = new HBox();
msg.setSpacing( 5 );
msg.getChildren().addAll( icon, new Message( message ) );
vb.getChildren().addAll( msg, bp );
dial.showDialog();
return buttonSelected;
}
public static void showMessageDialog( Stage owner, String message, String title ) {
showMessageDialog( owner, new Message( message ), title );
}
public static void showMessageDialog( Stage owner, Node message, String title ) {
VBox vb = new VBox();
Scene scene = new Scene( vb );
final Dialog dial = new Dialog( title, owner, scene, "res/Info.png" );
vb.setPadding( new Inset(10,10,10,10) );
vb.setSpacing( 10 );
Button okButton = new Button( "OK" );
okButton.setAlignment( Pos.CENTER );
okButton.setOnAction( new EventHandler<ActionEvent>() {
@Override public void handle( ActionEvent e ) {
dial.close();
}
} );
BorderPane bp = new BorderPane();
bp.setCenter( okButton );
HBox msg = new HBox();
msg.setSpacing( 5 );
msg.getChildren().addAll( icon, message );
vb.getChildren().addAll( msg, bp );
dial.showDialog();
}
}
여기 답변에서 수정 : https://stackoverflow.com/a/7505528/921224
javafx.scene.control.Alert
For a an in depth description of how to use JavaFX dialogs see: JavaFX Dialogs (official) by code.makery. They are much more powerful and flexible than Swing dialogs and capable of far more than just popping up messages.
import javafx.scene.control.Alert
import javafx.scene.control.Alert.AlertType;
import javafx.application.Platform;
public class ClassNameHere
{
public static void infoBox(String infoMessage, String titleBar)
{
/* By specifying a null headerMessage String, we cause the dialog to
not have a header */
infoBox(infoMessage, titleBar, null);
}
public static void infoBox(String infoMessage, String titleBar, String headerMessage)
{
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle(titleBar);
alert.setHeaderText(headerMessage);
alert.setContentText(infoMessage);
alert.showAndWait();
}
}
One thing to keep in mind is that JavaFX is a single threaded GUI toolkit, which means this method should be called directly from the JavaFX application thread. If you have another thread doing work, which needs a dialog then see these SO Q&As: JavaFX2: Can I pause a background Task / Service? and Platform.Runlater and Task Javafx.
To use this method call:
ClassNameHere.infoBox("YOUR INFORMATION HERE", "TITLE BAR MESSAGE");
or
ClassNameHere.infoBox("YOUR INFORMATION HERE", "TITLE BAR MESSAGE", "HEADER MESSAGE");
This works since java 8u40:
Alert alert = new Alert(AlertType.INFORMATION, "Content here", ButtonType.OK);
alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
alert.show();
- You can have a look to the great tool JavaFX Dialogs are simple dialogs in the style of JOptionPane from Swing
JavaFX UI Controls Project 에서 제공하는 대화 상자를 제공 할 수 있습니다 . 나는 그것이 당신을 도울 것이라고 생각합니다
Dialogs.showErrorDialog(Stage object, errorMessage, "Main line", "Name of Dialog box");
Dialogs.showWarningDialog(Stage object, errorMessage, "Main line", "Name of Dialog box");
public myClass{
private Stage dialogStage;
public void msgBox(String title){
dialogStage = new Stage();
GridPane grd_pan = new GridPane();
grd_pan.setAlignment(Pos.CENTER);
grd_pan.setHgap(10);
grd_pan.setVgap(10);//pading
Scene scene =new Scene(grd_pan,300,150);
dialogStage.setScene(scene);
dialogStage.setTitle("alert");
dialogStage.initModality(Modality.WINDOW_MODAL);
Label lab_alert= new Label(title);
grd_pan.add(lab_alert, 0, 1);
Button btn_ok = new Button("fermer");
btn_ok.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
// TODO Auto-generated method stub
dialogStage.hide();
}
});
grd_pan.add(btn_ok, 0, 2);
dialogStage.show();
}
}
'Program Tip' 카테고리의 다른 글
URL 쿼리에 대한 NameValueCollection? (0) | 2020.11.06 |
---|---|
Python 목록 반복을위한 시작 색인 (0) | 2020.11.06 |
C ++ : 레지스터에 피연산자 하나를 유지하여 놀라운 속도 향상 (0) | 2020.11.05 |
HTML / CSS UI로 네이티브 C ++ 앱을 빌드하는 방법은 무엇입니까? (0) | 2020.11.05 |
표면과 질감의 차이 (SDL / 일반) (0) | 2020.11.05 |