javafx中如何给面板添加背景图片例如BorderPane

javafx中如何给面板添加背景图片例如BorderPane,第1张

用指定的图片构造标签对象lb。

把标签放在第二层JlayerPane上。

设置标签的尺寸,即背景图象的大小。

把内容面板设置为透明,这样整个框架的背景就不再是内容面板的背景色,而是第二层中标签的图像。

将标签添加到主面板pnlMain中。

做法一:

InputStream is =null

AudioStream as = null

is = getClass().getResourceAsStream("a.wav")

try {

as = new AudioStream(is)

} catch (IOException e) {}

AudioPlayer.player.start(as)

此方法将音乐文件放入流中在播放,仅限于Java Application,容易报错,空指针异常,或者是流异常,不推荐。

做法二:

String music = "a.wav"

AudioClip clip = Applet.newAudioClip(getClass().getResource(music))

次方法在Applet中运行没有问题,但是Application中getclass()会返回空指针,导致失败。

推荐做法:

private URL url

private AudioClip ac

File f1 = new File("C:/3.wav")

try {

url= f1.toURL()

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

ac= Applet.newAudioClip(cb1)

ac.play()

stage = new Stage()

stage.initModality(Modality.APPLICATION_MODAL)

stage.initStyle(StageStyle.TRANSPARENT)//这是让d出窗口透明,如果不设置stage透明,stackpane再怎么设置也没用。

FXML:

<StackPane

style="-fx-border-radius:8px-fx-opacity: 0.4-fx-background-color: black "

xmlns="Java SE | Oracle Technology Network" xmlns:fx="Java SE | Oracle Technology Network"

>

fxml里用css样式 -fx-opacity: 0.4控制stackpane半透明

以上方法stage显示后是半透明遮罩效果,但是我想要在stackpane中间一块区域里放输入对话框,结果输入部分还是半透明的效果,还未能解决

追加----换了下实现方式,就是在primaryStage布局中用stackpane,在stackpane的children中添加一个半透明的pane,<Pane fx:id="main_mask" style="-fx-border-radius:8px-fx-opacity: 0.4-fx-background-color: black " visible="false" />,默认不显示;在显示d出的stage时,再通过代码设置main_mask显示,在关闭d出stage时,隐藏main_mask,这样能达到想要的效果了,但是这样的缺点是不通用,组件不独立,想办法改进中


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11502227.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存