KD Palekar Ответов: 2

Как удалить стандартные кнопки min, max и close в javafx?


Я хочу скрыть, отключить или удалить кнопки windows по умолчанию(min, max и close).
Я попробовал несколько вещей, но результат нулевой. Есть ли какой-нибудь способ сделать это?

ОПЕРАЦИОННАЯ

Существует любой способ создать пользовательскую форму, такую как Windows, но без этих кнопок.

Пожалуйста, помогите!!!

Что я уже пробовал:

package sample3;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Group;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.StageStyle;


public class Sample3 extends Application {
    
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
        
        stage.initStyle(StageStyle.UNDECORATED);

       // Group root = new Group();
        Scene scene = new Scene(root, 100, 100);

        stage.setScene(scene);
        stage.show();
        
        
        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
        
}

2 Ответов

Рейтинг:
7

KD Palekar

Итак, вот решение. Fisrt из всех создает файл класса java &и называет его.
Вот я и называю это имя formDecorator.java

package customform;

import java.awt.Insets;
import javafx.scene.Node;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

/**
 *
 * @author KD
 */
public class formDecorator extends AnchorPane
{
    private double xOffset = 0;
    private double yOffset = 0;
    private Stage primaryStage;
    
    public formDecorator(Stage stage, Node node) {
        super();
        
        primaryStage = stage;
        this.setPadding(new javafx.geometry.Insets(0, 0, 0, 0));
    
        this.getChildren().addAll(node);

        this.setOnMousePressed((MouseEvent event) -> {
            xOffset = event.getSceneX();
            yOffset = event.getSceneY();
        });
        this.setOnMouseDragged((MouseEvent event) -> {
            primaryStage.setX(event.getScreenX() - xOffset);
            primaryStage.setY(event.getScreenY() - yOffset);
        });
       
}

}




а второй файл - это ваш основной файл класса. Мой-кусторформ. Там вы должны написать следующий код -

package customform;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

/**
 *
 * @author KD
 */
public class CustomForm extends Application {
    
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
        
        stage.initStyle(StageStyle.TRANSPARENT);
        Scene scene = new Scene(new formDecorator(stage,root));
        scene.setFill(null);
        
        
        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
    
}



Вот и все. Теперь запустите свою программу.


Рейтинг:
1

Richard MacCutchan

Вы должны попробовать некоторые из различных стилей в StageStyle (JavaFX 8)[^].


KD Palekar

Я видел это раньше, но не знаю, как реализовать это в программе. Пожалуйста, помогите мне.

Richard MacCutchan

Помочь тебе с чем? Проверьте документацию и попробуйте несколько вариантов, чтобы увидеть, делает ли какой-либо из них то, что вы хотите. Попробуйте больше использовать свою инициативу, чтобы узнать о структуре, которую вы используете.

KD Palekar

Я сделал это. Все Равно Спасибо.

Richard MacCutchan

Ну а как насчет того, чтобы опубликовать решение с подробностями, чтобы помочь другим людям, которые могут захотеть узнать об этом?

KD Palekar

- Да, Конечно. Я сделаю на нем видео, потому что не нашел ни одного видео. Я сделаю видео. И выложить на YouTube. и предоставлю ссылку здесь.

Richard MacCutchan

Достаточно будет просто показать необходимый код. Большинство людей предпочитают иметь возможность увидеть код и сделать копию, а не смотреть видео.

Richard MacCutchan

Разве вы не можете просто показать код и объяснение здесь, чтобы люди могли прочитать, а при необходимости и скопировать его для себя?

KD Palekar

Хорошо....