티스토리 뷰

들어가며

  • JavaFX Spinner를 사용하게 되면 FXML 상에서 바로 Spinner의 값을 세팅해주면 편할 때가 있습니다.
    • 변하지 않는 정적인 데이터를 사용하는 경우 적합
  • 이때 간단하게 FXML에서 스피너의 데이터를 세팅하는 방법에 대해서 알아보겠습니다.
  • Spinner의 사용법에 대한 자세한 내용은 아래 포스팅을 참고해주세요
 

(JavaFX) JavaFX Spinner 개념 및 사용법

들어가며 JavaFX Spinner에 대해서 알아보겠습니다. Spinner 는 ComboBox 와 비슷하지만 드롭다운이 없이 현재 데이터 값을 나타내며 증가, 감소 버튼으로 값을 변경할 수 있는 컨트롤 입니다. 순차적인 �

jinseongsoft.tistory.com


설정 방법

  • FXML상에서 Spinner의 데이터 세팅 방법은 크게 두가지로 나뉩니다.
  • Value Factory에 대한 자세한 내용은 위에서 언급한 "Spinner 사용법" 포스팅을 참고바랍니다.
    • 간단하게 이야기 하자면 Spinner의 세팅할 데이터 시퀀스를 정의하는 클래스임 

ValueFactory를 사용하여 세팅

  • ValueFactory를 사용하는 방식은 아래와 같이 Spinner안에 <valueFactory> 태그를 이용하여 정의할 있습니다.
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.util.* ?>
<?import javafx.scene.*?>
<?import javafx.scene.control.* ?>
<?import javafx.scene.layout.* ?>


<BorderPane xmlns:fx="http://javafx.com/fxml/1" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.40" fx:controller="demoapp.DemoController">
  <center>
    <Spinner fx:id="spinner" BorderPane.alignment="CENTER" >
      <valueFactory>
        <SpinnerValueFactory.IntegerSpinnerValueFactory min="0" max="10"/>
      </valueFactory>
    </Spinner>
  </center>
</BorderPane>

ValueFactory를 사용하지 않고 세팅

  • ValueFactory를 사용하는 방식은 아래와 같이 Spinner 태그에 직접 min, max 값을 설정해줄 수 있습니다.
    • (참고)FXML에서는 사용하지 않았지만 Spinner 내부에서는 min, max 값을 가지고 Value Factory를 생성함
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.util.* ?>
<?import javafx.scene.*?>
<?import javafx.scene.control.* ?>
<?import javafx.scene.layout.* ?>


<BorderPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="demoapp.DemoController" xmlns="http://javafx.com/javafx/8.0_40" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"  >
  <center>
    <fx:define>
      <Integer fx:id="min" fx:value="0"/>
      <Integer fx:id="max" fx:value="10"/>
    </fx:define>
    <Spinner fx:id="spinner" BorderPane.alignment="CENTER" min="$min" max="$max">
    </Spinner>
  </center>
</BorderPane>

예제

  • 위 방법을 실제로 예제 프로그램을 통해서 구현해보겠습니다.
  • 예제에서는 설정 방법 두가지를 동시에 구현하여 비교해보겠습니다.

SpinnerInitialized.fxml

<fx:root style="-fx-background-color: #A2A5AC;" type="AnchorPane" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" stylesheets="@../fx.css" prefWidth="400" prefHeight="250">
  <VBox AnchorPane.bottomAnchor="0" AnchorPane.rightAnchor="0" AnchorPane.leftAnchor="0" AnchorPane.topAnchor="0" alignment="CENTER" spacing="20">
    <HBox alignment="CENTER">
      <Label text="Spinner with factory: "/>
      <Spinner fx:id="spinnerWithFactory" styleClass="my-spinner">
        <valueFactory>
          <SpinnerValueFactory.IntegerSpinnerValueFactory min="0" max="10" initialValue="5" amountToStepBy="1"/>
        </valueFactory>
      </Spinner>
    </HBox>
    <HBox alignment="CENTER">
      <Label text="Spinner without factory: "/>
      <fx:define>
        <Integer fx:id="min" fx:value="0"/>
        <Integer fx:id="max" fx:value="10"/>
        <Integer fx:id="amount" fx:value="1"/>
      </fx:define>
      <Spinner fx:id="spinnerWithoutFactory" min="$min" max="$max" amountToStepBy="$amount" styleClass="my-spinner"/>
    </HBox>
  </VBox>
</fx:root>

SpinnerInitializedController.java

public class SpinnerInitializedController extends AnchorPane {

  @FXML
  private Spinner<Integer> spinnerWithFactory;
  @FXML
  private Spinner<Double> spinnerWithoutFactory;

  public SpinnerInitializedController() {
    FxUiUtil.initializeFont();
    FxUiUtil.loadFxml(this);
  }
}

SpinnerInitalizedControllerTest.java

public class SpinnerInitalizedControllerTest extends Application {
  @Override
  public void start(Stage primaryStage) throws Exception {
    SpinnerInitializedController controller = new SpinnerInitializedController();
    primaryStage.setScene(new Scene(controller));
    primaryStage.setTitle("Spinner Initialized Test");
    primaryStage.show();
  }

  @Test
  public void test() {
    launch();
  }
}

결과화면


관련글

 

(JavaFX) JavaFX ScrollBar 개념 및 사용법

들어가며 JavaFX ScrollBar 에 대해서 알아보도록 하겠습니다. ScrollBar 는 말 그대로 스크롤 기능을 지원하는 컨트롤입니다. 사실 스크롤바를 직접 사용할 일은 그렇게 많지는 않을 것 같긴하지만 .. �

jinseongsoft.tistory.com

 

(JavaFX) JavaFX Spinner 개념 및 사용법

들어가며 JavaFX Spinner에 대해서 알아보겠습니다. Spinner 는 ComboBox 와 비슷하지만 드롭다운이 없이 현재 데이터 값을 나타내며 증가, 감소 버튼으로 값을 변경할 수 있는 컨트롤 입니다. 순차적인 �

jinseongsoft.tistory.com

 

(JavaFX) JavaFX Pagination 사용법

들어가며 JavaFX Pagination의 사용법을 알아보겠습니다. Pagination은 간단하게는 게시판 형식의 화면, Table 형태의 데이터를 나타내는데 자주 쓰이는 컨트롤입니다. 사용법 JavaFX Pagination JavaFX Paginati..

jinseongsoft.tistory.com

 

(JavaFX) JavaFX ImageView 사용법 (이미지 전시 방법)

들어가며 JavaFX ImageView 를 사용하여 Image를 전시하는 방법에 대해서 알아보도록 하겠습니다. 테스트를 위해서는 Sample로 사용할 이미지가 필요하니 필요에 따라 준비하시면 좋습니다. JavaFX ImageVie

jinseongsoft.tistory.com

 

(JavaFX) JavaFX TableView 사용법 ver.2

들어가며 이전에 썼던 글인 JavaFX TableView 사용법 이 시간이 지나서 보니 조금 설명이 허접한 것 같기도 하고.. 리뉴얼이 필요할 것 같았다. [JavaFX] Table View 사용법 Table View 사용법 이번 시간에는 Ja

jinseongsoft.tistory.com

 

반응형
댓글