如何解决自定义对话框在第一次显示时闪烁
我创建了一个自定义 Dialog
,但在第一次显示时它会闪烁。仅在添加自定义图形时才会发生。
视图控制器类:
public final class CustomDialog extends Dialog<Boolean> {
@FXML
private Label content_label;
@FXML
private Button ok_button;
@FXML
private ImageView graphic_imageview;
private int type;
static public int INFORMATION = 1;
static public int WRANING = 2;
private String getDesktopProperty;
private String graphicPath;
public CustomDialog (Window owner,String title,String content,int type) throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("dialog.fxml"));
loader.setController(this);
DialogPane dialogPane = loader.load();
initOwner(owner);
initModality(Modality.APPLICATION_MODAL);
setResizable(false);
setWidth(600);
setHeight(110);
setTitle(title);
updateContent(content);
setDialogPane(dialogPane);
}
@FXML
private void initialize() {
getDialogPane().getScene().getWindow().setOnCloseRequest(event -> {
closeDialog();
});
getDialogPane().getScene().getWindow().setOnShowing(event -> {
((Runnable) Toolkit.getDefaultToolkit().getDesktopProperty(getDesktopProperty)).run();
});
switch (type) {
case 2:
getDesktopProperty = "win.sound.excalmation";
graphicPath = "img/custom_dialog_graphics/impostor.gif";
break;
default:
getDesktopProperty = "win.sound.asterisk";
graphicPath = "img/custom_dialog_graphics/jolly.gif";
break;
}
try {
updateGraphic(new Image(graphicPath));
} catch (Exception e) {
e.printStackTrace();
}
}
@FXML
private void ok_button_action (ActionEvent event) {
closeDialog();
}
public void updateTitle (String title) {
setTitle(title);
}
public void updateContent (String content) {
content_label.setText(content);
}
public void updateGraphic (Image image) {
graphic_imageview.setImage(image);
}
public void updateType (Image image) {
graphic_imageview.setImage(image);
}
private void closeDialog () {
setResult(Boolean.TRUE);
close();
}
}
FXML:
<DialogPane maxHeight="110.0" maxWidth="370.0" minHeight="110.0" minWidth="370.0" prefHeight="110.0" prefWidth="370.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1">
<graphic>
<AnchorPane prefHeight="110.0" prefWidth="100.0">
<children>
<ImageView fx:id="graphic_imageview" fitHeight="80.0" fitWidth="80.0" layoutX="-27.0" layoutY="-20.0" pickOnBounds="true" preserveRatio="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
<image>
<Image url="@img/jolly.gif" />
</image>
</ImageView>
</children>
<opaqueInsets>
<Insets />
</opaqueInsets>
</AnchorPane>
</graphic>
<content>
<AnchorPane prefHeight="200.0" prefWidth="200.0">
<children>
<GridPane layoutX="-3.0" layoutY="-2.0" prefHeight="92.0" prefWidth="263.0" AnchorPane.bottomAnchor="-20.0" AnchorPane.leftAnchor="-10.0" AnchorPane.rightAnchor="-10.0" AnchorPane.topAnchor="0.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="189.0" minWidth="10.0" prefWidth="129.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="123.0" minWidth="10.0" prefWidth="121.0" />
<ColumnConstraints hgrow="NEVER" maxWidth="10.0" minWidth="10.0" prefWidth="10.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Button fx:id="ok_button" maxHeight="25.0" maxWidth="75.0" minHeight="25.0" minWidth="75.0" mnemonicParsing="false" onAction="#ok_button_action" prefHeight="25.0" prefWidth="75.0" text="OK" GridPane.columnIndex="1" GridPane.halignment="RIGHT" GridPane.rowIndex="2" GridPane.valignment="BOTTOM" />
<Label fx:id="content_label" alignment="TOP_LEFT" prefHeight="52.0" prefWidth="250.0" text="Lorem ipsum dolor" wrapText="true" GridPane.columnSpan="2" GridPane.rowSpan="2" />
</children>
</GridPane>
</children>
</AnchorPane>
</content>
</DialogPane>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。