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);
背景色、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);
文字の大きさ、色、フォントの変更
実時の大きさは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);
境界線を設定
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);
タイトルを設定
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では同じことはできないので自作することになる。
まずはコントロール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);
サンプルプログラム
紹介したすべてのコントロールを表示するサンプルプログラム
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