簡體   English   中英

無法在屏幕JavaFX上顯示畫布

[英]Having trouble showing canvas on screen JavaFX

因此,我對JavaFX還是很陌生,並且正在嘗試制作一個具有透明背景和兩個紅色圓圈的應用程序。 當我將鼠標懸停在任務欄中的應用程序圖標上時,圓圈會出現(在小的預覽窗口中),但不會顯示在屏幕上。

編輯:使用Screen類而不是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;
}

用JavaFX Screen類替換awt代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM