ともさんのHP >プロブラミング >JavaFX >ボタンやラベルの修飾方法

JavaFXボタンやラベルの修飾方法

ボタンやラベルの背景色を変えたり、4隅の角を丸くしたりするサンプルプログラムです。

広告


サイズの変更

幅はsetPrefWidth()、高さはsetPrefHeight()で指定する。

  Button b1 = new Button("ボタン楽天 ");
  b1.setPrefWidth(50);
  b1.setPrefHeight(50);
  pane.getChildren().add(b1);
  
  Label l1 = new Label( "ラベル" );
  l1.setPrefWidth(150);
  l1.setPrefHeight(26);
  pane.getChildren().add(l1);

JavaFXコントロールの大きさ設定


背景色、4隅の角R、内側オフセットを設定する

背景の色を設定するには、setBackground()で背景色を設定する。

  Button b2 = new Button("ボタン");
   b2.setBackground(new Background(new BackgroundFill( Color.WHITE , CornerRadii.EMPTY , Insets.EMPTY )));
  pane.getChildren().add(b2);

new BackgroundFillの2番目のパラメーターを設定することで4隅の角を丸くすることができる。

  Label l2 = new Label( "ラベル" );
  l2.setBackground(new Background(new BackgroundFill( Color.RED , new CornerRadii(5) , Insets.EMPTY )));
  pane.getChildren().add(l2);

3番目のパラメーターは、内側へのオフセット。数値をセットするとその分だけ小さくなる。

  TextField t1 = new TextField("テキスト1");
  t1.setBackground(new Background(new BackgroundFill( Color.AQUAMARINE , new CornerRadii(5) , Insets.EMPTY  )));
  pane.getChildren().add(t1);
  TextField t2 = new TextField("テキスト2");
  t2.setBackground(new Background(new BackgroundFill( Color.BLUEVIOLET , new CornerRadii(10) , new Insets(5) )));
  pane.getChildren().add(t2);

JavaFX背景の設定


文字の大きさ、色、フォントの変更

実時の大きさはsetFont()で設定する。色はsetTextFill()。
フォントはsetFont()へ入れるFontに設定すればよいが、日本語の見栄えが変わるフォントはあまりないみたい。

  Button b3 = new Button("Button");
  b3.setFont( new Font(20));
  b3.setTextFill(Color.RED);
  pane.getChildren().add(b3);

  Label l3 = new Label( "Label" );
  l3.setFont( Font.font("Impact",30) );
  l3.setTextFill(Color.AQUA);
  pane.getChildren().add(l3);

JavaFX文字の大きさと色の変更


境界線を設定

Borderを設定し、コントロールにセットすることで境界線をつけることができる。線の代わりに画像をつけることも可能。

  Label l4 = new Label( "ラベル" );
  Border border = new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, BorderWidths.DEFAULT));
  l4.setBorder( border );
  pane.getChildren().add(l4);
  Label l5 = new Label( "ラベル" );
  Border border2 = new Border(new BorderStroke(Color.RED, BorderStrokeStyle.DASHED, CornerRadii.EMPTY, BorderWidths.DEFAULT));
  l5.setBorder( border2 );
  pane.getChildren().add(l5);

JavaFXラベルの境界線を設定


タイトルを設定

JavaSwingであれば下記のようにコントロールにタイトルを設定することが可能。
JavaSwingラベルのタイトルを設定

package tomojavalib.swingfx;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.Jbutton;
import javax.swing.Jframe;
import javax.swing.Jpanel;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;

public class ControlTestSwing extends Jframe {
//ファイルの状態フラグ
boolean file = false;

/*コンストラクタ*/
public ControlTestSwing()
{
 //サイズ設定
 this.setBounds(500, 500, 320, 240);
 Jpanel pane = new Jpanel();
 add(pane);
//タイトル付きボタンの設定
TitledBorder border = new TitledBorder(new LineBorder(Color.DARK_GRAY, 0),"注記表示", TitledBorder.LEFT, TitledBorder.TOP);
border.setTitleFont(new Font("MS ゴシック", Font.PLAIN,10));
Jbutton menubutton = new Jbutton( "表示します" );
menubutton.setPreferredSize(new Dimension(100,40));
pane.add(menubutton);
menubutton.setBorder(border);
}

public static void main(String[] args) {
 ControlTestSwing cts = new ControlTestSwing();
 cts.setVisible(true);
}
}

Java 楽天 FXでは同じことはできないので自作することになる。
JavaFXタイトル付きコントロール

まずはコントロールclass

package tomojavalib.p2cad.mainstage;

import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;

/**タイトル付きのボタンやラベルを作成する*/
public class TitleItem extends StackPane{
public Button button = null;
public Label label = null;
Label title =null;
public boolean b;


/***
 * コンストラクタ
 * @param button trueならボタン、falseならラベル
 * @param title タイトル
 * @param w 幅
 * @param h 高さ
 * @param text ボタンまたはラベルに表示するテキスト
 */
public TitleItem( boolean b , String title , double w ,double h,String text){
 super();

 this.title = new Label();
 this.b = b;
 if(b){
  button  = new Button();
  this.getChildren().add( button );
 }else{
  label = new Label();
  this.getChildren().add(label);
  label.setBackground(new Background(new BackgroundFill( Color.WHITE , CornerRadii.EMPTY , Insets.EMPTY )));
 }
this.setTitle(title);
this.setSize(w, h);
this.setText(text);
StackPane.setAlignment( this.title , Pos.TOP_LEFT );
StackPane.setMargin( this.title , new Insets(0) );
this.getChildren().add( this.title );

}



public void setTitle( String title ){
 this.title.setText( title );
 this.title.setFont( new Font(8) );
}

public void setText( String text ){
 if(b){
  button.setText(text);
 }else{
  label.setText(text);
 }
}


public void setSize( double w , double h ){
 this.setWidth(w);
 this.setHeight(h);
 if(b){
  button.setPrefHeight(h);
  button.setPrefWidth(w);
 }else{
  label.setPrefHeight(h);
  label.setPrefWidth(w);
 }
}

public void setToolTipText( String s ){
 if(b){
  button.setTooltip(new Tooltip(s));
 }else{
  label.setTooltip(new Tooltip(s));
 }
}

public boolean isEnabled(){
 if(b){
  return button.isDisabled();
 }else{
  return label.isDisabled();
 }
}

public void setEnabled( boolean c ){
 if(b){
  button.setDisable( c );
 }else{
  label.setDisable( c );
 }
}


このclassを使うには下記のように記述する。

  TitleItem b = new TitleItem( true , "test", 50, 30,"テスト");
  pane.getChildren().add(b);
  TitleItem l = new TitleItem( false , "test", 50, 30,"テスト");
  l.setSize(200, 30);
  pane.getChildren().add(l);

広告


サンプルプログラム

紹介したすべてのコントロールを表示するサンプルプログラム
JavaFXコントロールの修飾

package tomojavalib.swingfx;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import tomojavalib.p2cad.mainstage.TitleItem;


public class ControlTest extends Application {

 public static void main(String[] args) {
  Application.launch(args);
 }

 @Override
 public void start(Stage stage) throws Exception {
  //StageにPaneとSceneを置く
  FlowPane pane = new FlowPane();
  pane.setPadding(new Insets(10, 10, 10, 10));
  Scene scene = new Scene(pane, 320, 240);
  setControl(pane);
  stage.setScene(scene);
  stage.show();
 }


 private void setControl(Pane pane){
  //ボタンのサイズを変更する
  Button b1 = new Button("ボタン");
  b1.setPrefWidth(50);
  b1.setPrefHeight(50);
  pane.getChildren().add(b1);
  //ラベルのサイズを変更する
  Label l1 = new Label( "ラベル" );
  l1.setPrefWidth(150);
  l1.setPrefHeight(26);
  pane.getChildren().add(l1);
  //ボタンの背景色を設定する
  Button b2 = new Button("ボタン");
  b2.setBackground(new Background(new BackgroundFill( Color.WHITE , CornerRadii.EMPTY , Insets.EMPTY )));
  pane.getChildren().add(b2);
  //ラベルの背景色を設定して角を丸くする
  Label l2 = new Label( "ラベル" );
  l2.setBackground(new Background(new BackgroundFill( Color.RED , new CornerRadii(5) , Insets.EMPTY )));
  pane.getChildren().add(l2);
  //テキストフィールドの背景色を設定して角を丸くする
  TextField t1 = new TextField("テキスト1");
  t1.setBackground(new Background(new BackgroundFill( Color.AQUAMARINE , new CornerRadii(5) , Insets.EMPTY  )));
  pane.getChildren().add(t1);
  //テキストフィールドの背景色を設定して角を丸くして、大きさを内側にオフセットする
  TextField t2 = new TextField("テキスト2");
  t2.setBackground(new Background(new BackgroundFill( Color.BLUEVIOLET , new CornerRadii(10) , new Insets(5) )));
  pane.getChildren().add(t2);
  //ボタンの文字の大きさと色を設定する
  Button b3 = new Button("Button");
  b3.setFont( new Font(20));
  b3.setTextFill(Color.RED);
  pane.getChildren().add(b3);
  //ラベルの文字のフォントと色を設定する
  Label l3 = new Label( "Label" );
  l3.setFont( Font.font("Impact",30) );
  l3.setTextFill(Color.AQUA);
  pane.getChildren().add(l3);
  //ラベルに境界線を設定する
  Label l4 = new Label( "ラベル" );
  Border border = new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, BorderWidths.DEFAULT));
  l4.setBorder( border );
  pane.getChildren().add(l4);
  Label l5 = new Label( "ラベル" );
  Border border2 = new Border(new BorderStroke(Color.RED, BorderStrokeStyle.DASHED, CornerRadii.EMPTY, BorderWidths.DEFAULT));
  l5.setBorder( border2 );
  pane.getChildren().add(l5);
  //タイトル付きのコントロール
  TitleItem b = new TitleItem( true , "test", 50, 30,"テスト");
  pane.getChildren().add(b);
  TitleItem l = new TitleItem( false , "test", 50, 30,"テスト");
  l.setSize(200, 30);
  pane.getChildren().add(l);
 }

}

最終更新日: 2019-11-14 05:08:36

ともさんのHP >プロブラミング >JavaFX >ボタンやラベルの修飾方法

広告
新着ページ

AIを利用し、衣服のデザイン画から型紙を制作する方法  
2つのアパレル3D技術でひらくオーダーメイド生産の手法  
【洋裁型紙】前後身頃の肩の傾きは何故前身頃の方が傾いているのか  
電子追尾式天体写真撮影法  
日本ミツバチ巣箱の種類  
ドラフター(製図台)でソーイング  
日本ミツバチが逃亡  
カメさんの箱庭  
天体用デジタルカメラの構造と天体写真  
Javaで静止画像(Jpeg)を動画(Mov)に変換  
USBカメラをJAVAで制御  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます