在JavaFX2.0中创建未装饰阶段
我正试图在JavaFX2.0中创建一个自定义阶段。我希望我的舞台能像其他窗口一样在屏幕上投射阴影。。。我尝试了以下代码:在JavaFX2.0中创建未装饰阶段,java,javafx-2,Java,Javafx 2,我正试图在JavaFX2.0中创建一个自定义阶段。我希望我的舞台能像其他窗口一样在屏幕上投射阴影。。。我尝试了以下代码: public class ChatWindow { final private Stage stage = new Stage(StageStyle.UNDECORATED); private Scene scene; private Group rg; private Text t = new Text(); private double initx = 0, inity
public class ChatWindow {
final private Stage stage = new Stage(StageStyle.UNDECORATED);
private Scene scene;
private Group rg;
private Text t = new Text();
private double initx = 0, inity = 0;
public ChatWindow() {
rg = new Group();
scene = new Scene(rg, 320, 240);
//scene.setFill(null);
scene.setFill(new Color(0, 0, 0, 0));
stage.setScene(scene);
stage.show();
setupStage();
}
private void setupStage() {
Rectangle r = new Rectangle(5, 5, stage.getWidth() - 10, stage.getHeight() - 10);
r.setFill(Color.STEELBLUE);
r.setEffect(new DropShadow());
rg.setOnMousePressed(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
initx = me.getScreenX() - stage.getX();// - me.getSceneX();
inity = me.getScreenY() - stage.getY();
}
});
rg.setOnMouseDragged(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
stage.setX(me.getScreenX() - initx);
stage.setY(me.getScreenY() - inity);
}
});
rg.getChildren().add(r);
rg.getChildren().add(t);
}
public void setVisible() {
stage.show();
}
}
公共类聊天窗口{
最终私人舞台=新舞台(舞台风格未装饰);
私密场景;
私人集团rg;
私有文本t=新文本();
私有双initx=0,inity=0;
公共聊天窗口(){
rg=新组();
场景=新场景(rg,320,240);
//scene.setFill(null);
setFill(新颜色(0,0,0,0));
舞台场景;
stage.show();
setupStage();
}
私有阶段(){
矩形r=新矩形(5,5,stage.getWidth()-10,stage.getHeight()-10);
r、 setFill(颜色:钢蓝色);
r、 setEffect(新的DropShadow());
rg.setOnMousePressed(新的EventHandler(){
公共无效句柄(MouseEvent me){
initx=me.getScreenX()-stage.getX();/-me.getSceneX();
inity=me.getScreenY()-stage.getY();
}
});
rg.setonMouseDrawed(新的EventHandler(){
公共无效句柄(MouseEvent me){
stage.setX(me.getScreenX()-initx);
stage.setY(me.getScreenY()-inity);
}
});
rg.getChildren().add(r);
rg.getChildren().add(t);
}
public void setVisible(){
stage.show();
}
}
我可以看到阴影落下,但实际上它们是一个白色的背景,它落在上面。
所以,它是无用的,因为在彩色屏幕上缺陷是可见的,会使它看起来很难看
这是白色屏幕上的屏幕截图:
在彩色屏幕上:
如何解决这个问题??请提供帮助。您应该设置样式
StageStyle.TRANSPARENT
,请参阅下一个代码:
public class ChatWindow extends Application {
@Override
public void start(final Stage stage) throws Exception {
stage.initStyle(StageStyle.TRANSPARENT); // here it is
Group rg = new Group();
Scene scene = new Scene(rg, 320, 240, Color.TRANSPARENT);
stage.setScene(scene);
stage.show();
Rectangle r = new Rectangle(5, 5, stage.getWidth() - 10, stage.getHeight() - 10);
r.setFill(Color.STEELBLUE);
r.setEffect(new DropShadow());
rg.getChildren().add(r);
}
public static void main(String[] args) {
launch();
}
}