0
因此,我对JavaFX相当陌生,并且正在尝试使用透明背景和两个红色圆圈创建应用程序。当我将鼠标悬停在我的任务栏中的应用程序图标上时,会出现圆圈(在小预览窗口中),但不显示在屏幕上。在屏幕上显示画布时遇到问题JavaFX
编辑:使用屏幕类而不是awt的东西修复它。
我的代码是:
package com.razorrider7.touchgame;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.io.File;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import com.razorrider7.touchgame.manager.SettingsManager;
public class TouchGame extends Application {
public static String dataFolder = System.getenv("APPDATA") + File.separator + "TouchGame";
@Override
public void start(Stage stage) throws Exception {
SettingsManager.setup();
initUI(stage);
}
private void initUI(Stage stage) {
stage.setResizable(false);
// Make the window transparent
stage.initStyle(StageStyle.TRANSPARENT);
Pane pane = new Pane();
double width = getBounds().getWidth(), height = getBounds().getHeight();
stage.setWidth(width);
stage.setHeight(height);
stage.setX(0);
stage.setY(0);
// Create new canvases for the left and right joysticks
Canvas joy1 = new Canvas(), joy2 = new Canvas();
joy1.setWidth(Math.rint(width/6));
joy1.setHeight(Math.rint(width/6));
joy2.setWidth(Math.rint(width/6));
joy2.setHeight(Math.rint(width/6));
joy1.setTranslateX(0);
joy1.setTranslateY(height - width/6);
joy2.setTranslateX(width - width/6);
joy2.setTranslateY(height - width/6);
// Draw the joysticks
drawJoy(joy1);
drawJoy(joy2);
pane.getChildren().add(joy1);
pane.getChildren().add(joy2);
Scene scene = new Scene(pane);
stage.setScene(scene);
stage.setTitle("TouchGame");
stage.setAlwaysOnTop(true);
stage.show();
}
private void drawJoy(Canvas canvas) {
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setStroke(Color.RED);
gc.setFill(Color.RED);
gc.fillOval(1, 1, canvas.getWidth() - 1, canvas.getHeight() - 1);
}
public Rectangle getBounds() {
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
Rectangle bounds = gd.getDefaultConfiguration().getBounds();
Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(gd.getDefaultConfiguration());
Rectangle safebounds = new Rectangle(bounds);
safebounds.x += insets.left;
safebounds.y += insets.top;
safebounds.width -= (insets.left + insets.right);
safebounds.height -= (insets.top + insets.bottom);
return safebounds;
}
适合我,圆圈显示没问题(OS X,Java 8u72)。我建议你不要混用UI工具包,并从程序中删除所有'java.awt'导入。此外,编程场景图而不是画布通常更容易。 – jewelsea
也许您可以尝试替换您的awt代码的等效方法是JavaFX [Screen](https://docs.oracle.com/javase/8/javafx/api/javafx/stage/Screen.html)类。 – jewelsea
是的,就是这样。使用Screen类修复了它。谢谢! – razorrider7