고급 JAVA/FX

javaFX - CSS 스타일 (font 속성 / shadow 효과 / 화면 스킨 입히기)

행복하게사는게꿈 2020. 5. 23. 12:31

예제)

자바

package thisisjava;



import javafx.application.Application;

import javafx.fxml.FXMLLoader;

import javafx.scene.Parent;

import javafx.scene.Scene;

import javafx.stage.Stage;



public class AppMain extends Application {

@Override

public void start(Stage primaryStage) throws Exception {

Parent root = FXMLLoader.load(getClass().getResource("root.fxml"));

Scene scene = new Scene(root);

scene.getStylesheets().add(getClass().getResource("app.css").toString());


primaryStage.setTitle("font");

primaryStage.setScene(scene);

primaryStage.show();

}


public static void main(String[] args) {

launch(args);

}

}



 

FXML

<?xml version="1.0" encoding="UTF-8"?>



<?import javafx.scene.layout.*?>

<?import javafx.geometry.*?>

<?import javafx.scene.control.*?>



<VBox id="root" xmlns:fx="http://javafx.com/fxml" >

   <children>

      <Label id="name-text" text="My name is 부르곰" />   

   </children>

</VBox>



 

CSS

#root {

-fx-padding: 10;

}



#name-text {

   -fx-font-size: 35;

   -fx-font-family: "Arial Black";

   -fx-font-weight: bold;

   -fx-text-fill: linear-gradient(to bottom, blue, white);

 


shadow 효과

 

JavaFX CSS 는 그림자 효과를 주기 위해 -fx-effect 속성 제공.

 

속성 값

 

1. dropshadow() : 바깥 그림자를 주어 튀어 나오는 느낌

 

2. innershadow() : 안쪽 그림자를 주어 움푹 들어간 느낌

 

자바

package thisisjava;



import javafx.application.Application;

import javafx.fxml.FXMLLoader;

import javafx.scene.Parent;

import javafx.scene.Scene;

import javafx.stage.Stage;



public class AppMain extends Application {

@Override

public void start(Stage primaryStage) throws Exception {

Parent root = FXMLLoader.load(getClass().getResource("root.fxml"));

Scene scene = new Scene(root);

scene.getStylesheets().add(getClass().getResource("app.css").toString());


primaryStage.setTitle("shadow");

primaryStage.setScene(scene);

primaryStage.show();

}


public static void main(String[] args) {

launch(args);

}

}



 

FXML

<?xml version="1.0" encoding="UTF-8"?>



<?import javafx.scene.layout.*?>

<?import javafx.geometry.*?>

<?import javafx.scene.control.*?>



<HBox prefWidth="300" prefHeight="150" xmlns:fx="http://javafx.com/fxml"  spacing="50" fillHeight="false" alignment="CENTER">

<padding>

<Insets topRightBottomLeft="10"/>

</padding>

   <children>

      <Button id="btn1" prefWidth="100" prefHeight="50" text="DropShadow"/>

      <Button id="btn2" prefWidth="100" prefHeight="50" text="InnerShadow"/>

   </children>

</HBox>


 

CSS

#btn1 {

-fx-effect: dropshadow(three-pass-box , rgba(0,0,0,0.7) , 10, 0 , 5 , 5);

}



#btn2 {

-fx-effect: innershadow(three-pass-box , rgba(0,0,0,0.7) , 10, 0 , 3, 3);

}

 


화면 스킨 입히기 

 

 - 지금 까지 공부한 css 총정리

 

 오라클 JavaFX CSS 샘플 예제)

자바

package thisisjava;



import javafx.application.Application;

import javafx.fxml.FXMLLoader;

import javafx.scene.Parent;

import javafx.scene.Scene;

import javafx.stage.Stage;



public class AppMain extends Application {

@Override

public void start(Stage primaryStage) throws Exception {

Parent root = FXMLLoader.load(getClass().getResource("root.fxml"));

Scene scene = new Scene(root);

scene.getStylesheets().add(getClass().getResource("app.css").toString());


primaryStage.setTitle("total");

primaryStage.setScene(scene);

primaryStage.show();

}


public static void main(String[] args) {

launch(args);

}

}



 

FXML

<?xml version="1.0" encoding="UTF-8"?>



<?import javafx.scene.layout.*?>

<?import javafx.scene.control.*?>



<AnchorPane styleClass="root"  xmlns:fx="http://javafx.com/fxml"

prefHeight="194.0" prefWidth="300.0" >

<children>

<Label id="welcome-text" layoutX="40.0" layoutY="14.0" text="오라클 예제" />   

<Label layoutX="42.0" layoutY="80.0" text="아이디" />

<Label layoutX="42.0" layoutY="118.0" text="패스워드" />

<TextField layoutX="120.0" layoutY="76.0" />

<PasswordField layoutX="120.0" layoutY="114.0" />

<Button layoutX="97.0" layoutY="158.0" styleClass="button" text="로그인" />

<Button layoutX="164.0" layoutY="158.0" styleClass="button" text="취소" />

</children>

</AnchorPane>


 

CSS

.root {

     -fx-background-image: url("images/background.jpg");

}



Label {

    -fx-font-size: 12px;

    -fx-font-weight: bold;

    -fx-text-fill: #333333;

}



#welcome-text {

   -fx-font-size: 35px;

   -fx-font-family: "Arial Black";

   -fx-text-fill: linear-gradient(darkgray, lightgray);

   -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 3, 0 , 2 , 2.1 );

}



.button {

    -fx-text-fill: white;

    -fx-font-family: "Arial Narrow";

    -fx-font-weight: bold;

    -fx-background-color: linear-gradient(#61a2b1, #2A5058);

    -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 10, 0 , 2 , 2 );

}



.button:hover {

    -fx-background-color: linear-gradient(#2A5058, #61a2b1);

}



.button:pressed {

    -fx-background-color: linear-gradient(yellow, #61a2b1);

}