2017-03-22 22 views
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; 
} 
+0

适合我,圆圈显示没问题(OS X,Java 8u72)。我建议你不要混用UI工具包,并从程序中删除所有'java.awt'导入。此外,编程场景图而不是画布通常更容易。 – jewelsea

+0

也许您可以尝试替换您的awt代码的等效方法是JavaFX [Screen](https://docs.oracle.com/javase/8/javafx/api/javafx/stage/Screen.html)类。 – jewelsea

+0

是的,就是这样。使用Screen类修复了它。谢谢! – razorrider7

回答