2017-03-22 21 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

回答