Một số thành phần UI cơ bản trong JavaFX môn Môi trường và lợi thế cạnh tranh | Học viện Nông nghiệp Việt Nam

Trong phần này, chúng tôi tập trung giới thiệu một số thành phần giaodiện tương tác (UI Control) thừa kế từ lớp javafx.scene.control.Control. Các mô tả về một thành phần giao diện bao gồm các lớp cha, các thuộc tính, phương thức của chính lớp đó hay thừa kế từ các lớp cha người lập trình cần tra cứu trong JavaFX API. Tài  liệu giúp bạn tham  khảo, ôn tập và đạt kết quả cao. Mời đọc đón xem!

Trường:

Học viện Nông nghiệp Việt Nam 1.7 K tài liệu

Thông tin:
20 trang 2 tuần trước

Bình luận

Vui lòng đăng nhập hoặc đăng ký để gửi bình luận.

Một số thành phần UI cơ bản trong JavaFX môn Môi trường và lợi thế cạnh tranh | Học viện Nông nghiệp Việt Nam

Trong phần này, chúng tôi tập trung giới thiệu một số thành phần giaodiện tương tác (UI Control) thừa kế từ lớp javafx.scene.control.Control. Các mô tả về một thành phần giao diện bao gồm các lớp cha, các thuộc tính, phương thức của chính lớp đó hay thừa kế từ các lớp cha người lập trình cần tra cứu trong JavaFX API. Tài  liệu giúp bạn tham  khảo, ôn tập và đạt kết quả cao. Mời đọc đón xem!

18 9 lượt tải Tải xuống
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
Mt s thành phn UI cơ bản trong JavaFX
Trong phn này, chúng tôi tp trung gii thiu mt s thành phn giao din tương tác
(UI Control) tha kế t lp javafx.scene.control.Control.
Các t v mt thành phn giao din bao gm các lp cha, các thuộc tính, phương
thc ca chính lớp ó hay thừa kế t các lớp cha người lp trình cn tra cu trong JavaFX API.
Thông thường hiu và s dng mt lp, ta trước hết cn biết các thuc tính ca chính lp ó,
các thuộc tính kế tha t các lp cha, căn cứ vào các thuộc tính ó ta sẽ d dàng tra ra các
phương thức tác ộng vào thông qua các tham chiếu phương thức ính kèm của thuc tính.
Ví d:
Các thành phn giao din tương tác tha kế t lp javafx.scene.control.Control thuc
cây tha kế:
javafx.scene.Node
javafx.scene.Parent
javafx.scene.layout.Region
javafx.scene.control.Control
T ó ta có thể liệt kê ược mt s thuộc tính, phương thức chung sau:
Bng mt s thuộc tính, phương thức chung ca các thành phn giao diện tương tác
Thuc tính
Phương thức
Lp Control
tooltip
getTooltip, setTooltip
Lp Region
background, border, width, height, insets,
maxWidth, maxHeight,
minWidth,
minHeight, padding
getBackground, setBackground, getBorder, setBorder,
getHeight, setHeight, getPadding, setPadding...
Lp Parent
needsLayout
isNeedsLayout, setNeedsLayout
Lp Node
id, disable, cursor, effect, focused, opacity,
rotate, scene, style, visible, scaleX, scaleY,
scaleZ, onDragEntered, onKeyPressed,
onMouseClicked,
onScroll, onZoom
getId, setId, isDisable, setDisable, getEffect, setEffect,
getStyle, getScene, setStyle, isVisible, setVisible,
setOnDragEntered, setOnKeyPressed,
setOnMouseClicked...
JavaFX Label
Label (Nhãn) trong JavaFX ược s dụng hin th nội dung văn bản, hình nh, t,
không cho phép người dùng chnh sa trc tiếp ni dung.
Các thuộc tính, constructor, phương thức ca lp javafx.scene.control.Label:
Bng các thuộc tính, constructor, phương thức ca lp javafx.scene.control.Label
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
Thuc tính
Constructor/Phương thức
Mô t
Label()
To nhãn không có ni dung
Label(String text)
To nhãn vi ni dung là chui truyn vào
Label(String text,
Node
graphic)
To nhãn vi ni dung là chui truyn vào và mt Node ha
labelFor
getLabelFor()
Ly giá tr thuc tính labelFor
setLabelFor(Node value)
Node qua bàn phím
Mt s thuc tính, phương thức ca lp Label tha kế t lp javafx.scene.control.
Labeled:
Bng các thuộc tính, constructor, phương thức ca lp Label tha kế t lp javafx.scene.control. Labeled
Thuc tính
Phương thức
Mô t
text
setText(String value)
Thiết lp ni dung cho nhãn
getText()
Ly giá tr ni dung văn bản ca nhãn
graphic
setGraphic(Node value)
Thiết lp hình nh hin th
alignment
setAlignment(Pos value)
Thiết lp v trí hin th.
font
setFont(Font value)
Thiết lp font ch cho nhãn
underLine
setUnderline(boolean value)
Thiết lp kiu gch chân
wrapText
setWrapText(boolean value)
Thiết lp chế t xung dòng ni dung nhãn
textFill
setTextFill(Paint value)
Thiết lp màu ch
Ví d:
import java.io.File; import java.io.FileInputStream;
import javafx.application.Application; import
javafx.geometry.Pos; import javafx.scene.Scene;
import javafx.scene.control.Label; import
javafx.scene.image.Image; import
javafx.scene.image.ImageView; import
javafx.scene.layout.VBox; import
javafx.scene.paint.Color; import
javafx.scene.text.Font; import javafx.stage.Stage;
public class JavaFXLabel extends Application {
@Override
public void start(Stage stage) throws Exception{
Label label1 = new Label();
label1.setGraphic(new ImageView(new Image(new FileInputStream(new
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
File("E:\\Hinh Anh\\fita-logo.png")))));
label1.setMaxWidth(55); label1.setAlignment(Pos.CENTER);
Label label2 = new Label();
label2.setText("http://fita.vnua.edu.vn");
label2.setTextFill(Color.BLUE); label2.setFont(new Font("Arial",
20)); label2.setAlignment(Pos.CENTER);
// Vbox: layout sp cÆc thnh phn chứa bŒn trong theo chiều dc
VBox vBox = new VBox(label1, label2); vBox.setSpacing(12);
vBox.setAlignment(Pos.CENTER);
Scene scene = new Scene(vBox, 300, 300);
stage.setTitle("Khoa CNTT - VNUA");
stage.setScene(scene); stage.show();
} public static void
main(String[] args) { launch(args);
}
}
Kết qu chạy chương trình:
JavaFX Button
Trong JavaFX lp Button (Nút nhn) ược s dụng x lý một hành ộng khi người dùng
nhp vào một nút nào ó trên giao diện. Nhãn ca Button có thvăn bản, ha hay c hai.
Mt s thuc tính, constructor, phương thức ca lp javafx.scene.control.Button:
Bng mt s thuộc tính, constructor, phương thức ca lp javafx.scene.control.Button
Thuc tính
Constructor/Phương thc
Mô t
Button()
To nhãn không có ni dung
Button(String text)
To nút nhn vi nhãn là chui truyn vào
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
Button(String text, Node
graphic)
To nút nhn vi ni dung là chui truyn vào và mt Node ha
cancelButton
isCancelButton()
Kim tra mt nút nhn có thuc kiu <cancel button= không
setCancelButton(boolean
value)
Thiết lp cho mt nút nhn có kh năng nhận s kin phím ESC. Ví d
sau s in ra Console thông ip <Cancel clicked= khi bm phím ESC:
Button cancelButton = new Button("Cancel");
cancelButton.setCancelButton(true);
cancelButton.setOnAction(e -> {
System.out.println("Cancel clicked.");
});
defaultButton
isDefaultButton()
Kim tra mt nút nhn có thuc kiu <default button= không
setDefaultButton(boolean
value)
Thiết lp cho mt nút nhn có kh năng nhận s kin phím Enter.
Mt s thuộc tính, phương thức ca lp Button tha kế t lp javafx.scene.control.
ButtonBase:
Bng mt s thuộc tính, phương thức ca lp Button tha kế t lp javafx.scene.control. ButtonBase
Thuc tính
Constructor/Phương thức
Mô t
onAction
getOnAction()
Ly giá tr thuc tính onAction
setOnAction(EventHandler<ActionEvent> value)
X lý s kin khi nút nhấn ược kích hot (fire)
Mt s thuộc tính, phương thức ca lp Button tha kế t lp javafx.scene.control.
Labeled tương tự như thành phần Label.
Ví d:
(Xem ví d minh ha JavaFX ầu chương)
JavaFX CheckBox
Trong JavaFX CheckBox thường ược s dụng trong trường hp cho phép la chn
nhiu tùy chn cùng mt lúc, mi CheckBox trong JavaFX th phn ánh 2 trng thái (có/
không) hoc 3 trạng thái (có/không/không xác ịnh) tùy thuc vic cu hình.
Mt s thuộc tính, constructor, phương thức ca lp javafx.scene.control.CheckBox:
Bng mt s thuộc tính, constructor, phương thức ca lp javafx.scene.control.CheckBox
Thuc tính
Constructor/Phương thức
Mô t
CheckBox()
To CheckBox không có nhãn
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
CheckBox(String text)
To CheckBox vi nhãn là chui truyn vào
selected
isSelected()
Kim tra mt CheckBox có ược check hay không
setSelected(boolean value)
Thiết lp trng thái check hay không check cho
CheckBox
indeterminate
isIndeterminate()
Kim tra mt CheckBox có ang trng thái <không
xác nh= hay không
setIndeterminate(boolean value)
Thiết lp trng thái <không xác nh= cho CheckBox
allowIndeterminate
isAllowIndeterminate()
Kim tra mt CheckBox cho phép trng thái <không
xác nh= hay không
setAllowIndeterminate(boolean
value)
Thiết lp CheckBox cho phép trng thái <không xác
nh= xut hin. Ví d:
CheckBox cbox = new CheckBox("Indeterminate
CheckBox");
cbox.setAllowIndeterminate(true);
Mt s thuộc tính, phương thức ca lp CheckBox tha kế t lp javafx.scene.control.
ButtonBase, javafx.scene.control.Labeled tương tự như lớp javafx.scene.control.Button
Ví d:
@Override
public void start(Stage stage) {
VBox root = new VBox();
Label label = new Label("LIST BOOK");
CheckBox checkBox1 = new CheckBox("Java Book");
checkBox1.setAllowIndeterminate(true); CheckBox
checkBox2 = new CheckBox("C# Book");
checkBox2.setAllowIndeterminate(true);
CheckBox checkBox3 = new CheckBox("Python Book");
checkBox3.setAllowIndeterminate(true);
root.setSpacing(10); root.setPadding(new Insets(15));
root.getChildren().addAll(label, checkBox1, checkBox2, checkBox3);
Scene scene = new Scene(root, 200, 200);
stage.setTitle("JavaFX CheckBox Demo");
stage.setScene(scene); stage.show();
}
Bn c t hoàn thin tm khung chương trình căn bản như các dụ trước. Kết qu
chạy chương trình:
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
Ni dung các CheckBox trong d cho biết, trong danh sách hiện ã cuốn sách C#,
cuốn Python chưa có và cuốn Java chưa xác ịnh ược ã có hay chưa.
JavaFX ToggleButton
ToggleButton mt loi nút nhn 2 trạng thái, ược la chn hoặc không ược la
chn. Các ToggleButton th ược t trong mt nhóm (Toggle Group), các ToggleButton trong
cùng mt nhóm ti mt thời iểm ch nhiu nht mt nút ược chn, nếu mt nút nhn ược
chn, các nút nhn khác trong nhóm s b mt la chn.
Mt s thuộc tính, constructor, phương thức ca lp
javafx.scene.control.ToggleButton:
Bng mt s thuộc tính, constructor, phương thức ca lp javafx.scene.control.ToggleButton
Thuc tính
Constructor/Phương thức
Mô t
ToggleButton()
To ToggleButton không có nhãn
ToggleButton (String text)
To ToggleButton vi nhãn là chui truyn vào
ToggleButton(String text,
graphic)
Node
To ToggleButton vi ni dung chui truyn vào mt
Node ha
selected
isSelected()
Kim tra mt ToggleButton có ược chn hay không
setSelected(boolean value)
Thiết lp trạng thái ược chn hay không cho
ToggleButton
toggleGroup
getToggleGroup()
Ly giá tr thuc tính toggleGroup cho biết ToggleButton hin
ti thuc nhóm nào
setToggleGroup(ToggleGroup value)
Gán ToggleButton vào mt nhóm
Lớp ToggleButton cũng thừa kế các thuộc tính, phương thức t lp javafx.scene.control.
ButtonBase, javafx.scene.control.Labeled.
Ví d:
@Override
public void start(Stage stage) {
HBox root = new HBox();
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
root.setPadding(new Insets(10));
root.setSpacing(5);
// To ToggleGroup
ToggleGroup group = new ToggleGroup();
ToggleButton maleBtn = new ToggleButton("Nam");
ToggleButton femaleBtn = new ToggleButton("N");
// Đặt cÆc ToggleButton vo nhm.
maleBtn.setToggleGroup(group); femaleBtn.setToggleGroup(group);
// Đặt la chn mc nh
maleBtn.setSelected(true);
root.getChildren().add(new Label("Gii
tnh:")); root.getChildren().addAll(maleBtn,
femaleBtn); Scene scene = new Scene(root, 300,
60);
stage.setTitle("Minh ha JavaFX
ToggleButton"); stage.setScene(scene);
stage.show();
}
Kết qu chạy chương trình:
JavaFX RadioButton
RadioButton trong JavaFX ược s dụng ể cho phép người dùng thc hin ch duy nht
mt la chn trong mt nhóm danh sách la chn. Mun nhóm nhiu RadioButton li vi nhau
chúng ta cn s dng ToggleGroup.
Các constructor ca lp javafx.scene.control.ToggleButton:
Bng 7.8. Các constructor ca lp javafx.scene.control.ToggleButton
Constructor
Mô t
RadioButton()
To RadioButton không có nhãn
RadioButton(String text)
To RadioButton vi nhãn là chui truyn vào
Lp RadioButton cũng thừa kế các thuộc tính, phương thức t lp
javafx.scene.control.ToggleButton, javafx.scene.control. ButtonBase,
javafx.scene.control.Labeled.
Ví d:
@Override
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
public void start(Stage stage) {
HBox root = new HBox();
// Tạo cÆc RadioButton v thŒm vo nhm
ToggleGroup group = new ToggleGroup();
RadioButton button1 = new RadioButton("Green");
button1.setToggleGroup(group);
RadioButton button2 = new RadioButton("Yellow");
button2.setToggleGroup(group);
RadioButton button3 = new RadioButton("Red");
button3.setToggleGroup(group);
// Thiết l¿p mc nh
button1.setSelected(true); root.setStyle("-fx-
background-color: #00FF00;");
// X l s kin thay i la chn RadioButton trong group
group.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
public void changed(ObservableValue<? extends Toggle> ov,
Toggle old_toggle, Toggle new_toggle) { if
(group.getSelectedToggle() != null) {
RadioButton selectedRadio = (RadioButton)
group.getSelectedToggle(); switch
(selectedRadio.getText()) { case
"Green":
root.setStyle("-fx-background-color:
#00FF00;");
break; case
"Yellow":
root.setStyle("-fx-background-color:
#FFFF00;");
break; case
"Red":
root.setStyle("-fx-background-color:
#FF0000;");
break;
default:
root.setStyle("-fx-background-color:
#FAF8CC;");
break;
}
}
}
}); root.setSpacing(5);
root.setAlignment(Pos.CENTER);
root.getChildren().addAll(button1, button2, button3);
Scene scene = new Scene(root, 300, 100);
stage.setTitle("Minh ha JavaFX RadioButton");
stage.setScene(scene); stage.show();
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
}
Kết qu chạy chương trình:
JavaFX ChoiceBox
Lớp ChoiceBox trong JavaFX ược s dụng trình bày cho người dùng mt tp hp các
la chọn ược xác ịnh trước và người dùng ch ược ưa ra một la chn. Theo mặc nh ChoiceBox
không có mục nào ược chn tr khi ược cài ặt trước.
Mt s thuộc tính, constructor, phương thức ca lp javafx.scene.control.ChoiceBox:
Bng mt s thuộc tính, constructor, phương thức ca lp javafx.scene.control.ChoiceBox
Thuc tính
Constructor/Phương thức
Mô t
ChoiceBox()
To ChoiceBox vi danh sách la chn rng
ChoiceBox(ObservableList<T> items)
To ChoiceBox vi danh sách la chn truyn
vào. Danh sách gn kèm ChoiceBox là mt danh
sách các ối tượng nào ó, giá tr ược hin th
trên ChoiceBox tùy thuc vào giá tr tr li ca
phương thức toString trong cài t ca ối tượng
ó
items
getItems()
Ly danh sách la chn gn vi ChoiceBox
setItems(ObservableList<T> value)
Thiết lp danh sách la chn cho ChoiceBox
selectionModel
getSelectionModel()
Ly giá tr thuc tính selectionModel. Thuc tính
này là mô hình qun lý d liu ca ChoiceBox,
ch cho phép chn mt la chn, cho phép thiết
lp la chn mc nh hoc theo dõi s la chn
t danh sách
setSelectionModel(SingleSelectionModel<T>
value)
Thiết lp giá tr cho
thuc tính selectionModel
value
getValue()
Ly giá tr thuc tính value (thuc tính ng vi
giá tr ang ược chn trên ChoiceBox) là mt th
hin ca ối tượng T trong
ObservableList<T>
setValue(T)
Gán giá tr cho thuc tính value
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
Ví d:
import javafx.application.Application; import
javafx.beans.value.ChangeListener; import
javafx.beans.value.ObservableValue; import
javafx.collections.FXCollections; import
javafx.collections.ObservableList; import
javafx.geometry.Insets; import javafx.scene.Scene; import
javafx.scene.control.ChoiceBox; import
javafx.scene.control.Label; import
javafx.scene.layout.HBox; import javafx.stage.Stage;
public class ChoiceBoxDemo extends Application
{
@Override public void start(Stage
primaryStage) { ProgrammingLanguage
java = new ProgrammingLanguage("PL01",
"Java");
ProgrammingLanguage cSharp = new ProgrammingLanguage("PL02", "C#");
ProgrammingLanguage ruby = new ProgrammingLanguage("PL03", "Ruby");
ProgrammingLanguage python = new ProgrammingLanguage("PL04",
"Python");
HBox root = new HBox();
Label label = new Label("Select Programming Language: ");
Label selectedPL = new Label();
ObservableList<ProgrammingLanguage> languages //
= FXCollections.observableArrayList(cSharp, java, ruby,
python);
ChoiceBox<ProgrammingLanguage> choiceBox = new
ChoiceBox<ProgrammingLanguage>(languages); // Đặt la chn
mc nh choiceBox.setValue(java);
selectedPL.setText(java.getCode() + "-" + java.getName());
ChangeListener<ProgrammingLanguage> changeListener = new
ChangeListener<ProgrammingLanguage>() {
@Override
public void changed(ObservableValue<? extends
ProgrammingLanguage> observable, //
ProgrammingLanguage oldValue, ProgrammingLanguage
newValue) {
// Hin th mª v tŒn ngn ngữ ược chn
ProgrammingLanguage selected = choiceBox.getValue();
selectedPL.setText(selected.getCode() + " - " + selected.getName());
}
};
// S kin khi thay ổi Item trŒn ChoiceBox
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
choiceBox.getSelectionModel().selectedItemProperty().addListener(changeList
ener); root.getChildren().addAll(label, choiceBox, selectedPL);
root.setPadding(new Insets(20)); root.setSpacing(5);
primaryStage.setTitle("Minh ha JavaFX ChoiceBox");
Scene scene = new Scene(root, 370, 100);
primaryStage.setScene(scene); primaryStage.show();
} public static void main(String[]
args) { launch(args);
}
}
public class ProgrammingLanguage {
private String code; private
String name;
public ProgrammingLanguage() {
} public ProgrammingLanguage(String code, String
name) { this.code = code; this.name = name;
} public String
getCode() { return
code;
} public void setCode(String
code) { this.code = code;
} public String
getName() { return
name;
} public void setName(String
name) { this.name = name;
}
@Override public
String toString() {
return this.name;
}
}
Kết qu chạy chương trình:
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
JavaFX TextField
TextField trong JavaFX ược s dụng cho phép người dùng nhp một dòng văn bn
không s dụng nh dng. JavaFX TextField thuc gói javafx.scene.control, nó tha kế t lp
javafx.scene.control.TextInputControl.
Mt s thuộc tính, constructor, phương thức ca lp javafx.scene.control.TextField:
Bng mt s thuộc tính, constructor, phương thức ca lp javafx.scene.control.TextField
Thuc tính
Constructor/Phương thức
Mô t
TextField()
To TextField vi dòng text ni dung rng
TextField(String text)
To TextField vi dòng text ni dung chui
truyn vào
alignment
getAlignment()
Ly giá tr thuc tính alignment (thuc tính căn
chnh nội dung văn bản trong ô)
setAlignment(Pos value)
Thiết lp giá tr cho thuc tính alignment
onAction
getOnAction()
Ly giá tr thuc tính bt s kin kết thúc nhp
text trong ô và bm Enter
setOnAction(EventHandler<ActionEvent> value)
Thiết lp x lý s kin kết thúc nhp text trong ô
và bm Enter
Mt s thuộc tính, phương thức tha kế t lp TextInputControl:
Bng mt s thuộc tính, phương thức tha kế t lp TextInputControl
Thuc tính
Phương thức
Mô t
anchor
getAnchor()
Ly giá tr s t tính t u ến v trí con tr son
tho tr i s ký t ang ược bôi en
caretPosition
getCaretPosition()
Ly giá tr s t tính t u ến v trí con tr son
tho
editable
isEditable()
Kim tra giá tr thuc tính editable (trng thái
cho phép chnh sa ô TextField hay không)
setEditable(boolean value)
Thiết lp giá tr cho thuc tính editable
font
getFont()
Ly giá tr thuc tính font ch cho text
setFont(Font value)
Thiết lp font ch cho text
length
getLength()
Ly giá tr dài text (s ký t)
promptText
getPromptText()
Ly giá tr thuc tính promptText (text chú thích
cho ô TextField)
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
setPromptText(String value)
Thit lp giá tr cho thuc tính promptText
selectedText
getSelectedText()
Ly giá tr oạn text ang ược bôi en trong ô
selection
getSelection()
Ly giá tr v trí bt u, v trí kết thúc ca
oạn text ang ược bôi en
text
getText()
Ly giá tr thuc tính text (oạn văn bản cha
trong ô)
setText(String value)
Thiết lp giá tr cho thuc tính text
Ví d:
@Override
public void start(Stage stage) { Label
label = new Label(); label.setMaxWidth(300);
label.setText("ĐNG NH¾P TRANG SINH VI˚N");
label.setAlignment(Pos.CENTER);
TextField textField = new TextField();
textField.setMaxWidth(200); textField.setMinHeight(25);
textField.setPromptText("Nh¿p mª sinh viŒn v nhấn Enter"); // V
hiu ha trng thÆi focus mc nh hin th prompt text
textField.setFocusTraversable(false);
// X l s kin kết thœc nh¿p v nhn Enter
textField.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Kiểm tra mª sinh viŒn: " + textField.getText());
}
});
VBox vBox = new VBox(label, textField);
vBox.setSpacing(10); vBox.setAlignment(Pos.CENTER);
Scene scene = new Scene(vBox, 300, 80);
stage.setTitle("Minh ha JavaFX TextField");
stage.setScene(scene); stage.show();
}
Kết qu chạy chương trình:
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
JavaFX PasswordField
Password Field trong JavaFX thường ược dùng ể nhp mt khu, các ký t nhp vào s
ược n bng cách hin th mt chui du sao. Lp PasswordField thuc gói
javafx.scene.control, nó tha kế t lp TextField.
Lp PasswordField ch duy nht mt constructor không tham s, không thuc
tính riêng, ghi è phương thức cut copy ca lp TextInputControl không cho phép cut,
copy.
Ví d:
@Override public void start(Stage
stage) {
TextField textField = new TextField();
textField.setMinWidth(200);
textField.setPromptText("Nh¿p m¿t khu...");
textField.setFocusTraversable(false);
textField.setLayoutX(20); textField.setLayoutY(20);
textField.setVisible(false);
// Trường password trøng v trí, kích thước với trường text
PasswordField passwordField = new PasswordField();
passwordField.setMinWidth(200);
passwordField.setPromptText("Nh¿p m¿t khu...");
passwordField.setFocusTraversable(false);
passwordField.setLayoutX(20); passwordField.setLayoutY(20);
CheckBox checkBox = new CheckBox();
checkBox.setText("Hin th");
checkBox.setLayoutX(20); checkBox.setLayoutY(50);
// X l s kin click vo checkbox checkBox.setOnAction(new
EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) { boolean selected =
checkBox.isSelected(); // Điều khin vic n hin của trường password,
text
textField.setVisible(selected);
passwordField.setVisible(!selected);
// Copy ni dung passwordfield -> textfield
if(selected) {
textField.setText(passwordField.getText());
}else {// Copy ni dung textfield -> passwordfield
passwordField.setText(textField.getText());
}
}
});
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
AnchorPane anchorPane = new AnchorPane(textField, passwordField,
checkBox);
Scene scene = new Scene(anchorPane, 300, 100);
stage.setTitle("Minh ha JavaFX PasswordField");
stage.setScene(scene); stage.show();
}
Kết qu chạy chương trình:
JavaFX TableView
JavaFX cung cp lp TableView, ược s dng cùng vi TableColumn TableCell
giúp bn hin th d liệu dưới dng bng. TableColumn ng vi mt ct trong bng, TableCell
ng vi mt ô trong bng.
+ Khi to TableView
// To mi TableView hin th danh sách ối tượng sinh viŒn
TableView<Student> table = new TableView<Student>();
+ Thêm ct vào TableView
// To cột mª sinh viŒn, kiểu d liu String
TableColumn<Student, String> codeCol
= new TableColumn<Student, String>("Msv");
table.getColumns().add(codeCol);
Có th dùng phương thức addAll(col1, col2, ...) ể thêm cùng lúc nhiu ct vào bng.
Có th nhóm các ct li với nhau trước khi thêm vào bng:
// To ct FullName (Kiu d liu String)
TableColumn<Student, String> fullNameCol
= new TableColumn<Student, String>("H tŒn");
// To 2 ct con cho ct FullName
TableColumn<Student, String> lastNameCol
= new TableColumn<Student, String>("H m");
TableColumn<Student, String> firstNameCol
= new TableColumn<Student, String>("TŒn");
// ThŒm 2 cột con vo ct FullName
fullNameCol.getColumns().addAll(lastNameCol, firstNameCol);
// ThŒm cột FullName vo bng
table.add(fullNameCol);
+ Hin th danh sách d liu lên TableView
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
- Tạo ối tượng Student với các trường mã sinh viên (code), email, h m
(firstName), tên (lastName), lớp (class_) cùng các phương thức get, set
- Bt cp các ct ca TableView vi các thuc tính ca Student
Ví d:
codeCol.setCellValueFactory(new PropertyValueFactory<Student,
String>("code"));
firstNameCol.setCellValueFactory(new PropertyValueFactory<Student,
String>("firstName"));
- Chuyn kiểu danh sách ối tượng Student sang kiu
ObservableList<Student>
Ví d:
List<Student> studentList = getStudentList();
ObservableList<Student> obsStudentList =
FXCollections.observableArrayList(studentList);
- Thêm danh sách ObservableList<Student> vào TableView
table.setItems(obsStudentList);
+ Ly v trí dòng ang ược chn trên TableView int selectedIndex =
table.getSelectionModel().getSelectedIndex();
+ Lấy ối tượng ng vi dòng ang ược chn trên TableView
Student selectedItem = table.getSelectionModel().getSelectedItem();
Hoc:
Student selectedItem = table .getItems().get(selectedIndex);
+ Thêm, cp nht, xóa d liu mt dòng trong d liu ca TableView
- Thêm mt hoc mt vài dòng: table.getItems().add(student1);
table.getItems().addAll(student1, student2, ...);
- Cp nht:
table.getItems().set(<ch s dng cn c¿p nh¿t>, <tham chiếu ối tượng d
liu mi c¿p nh¿t>);
- Xóa:
table.getItems().remove(<ch s dng cn xa>);
+ Chnh sa d liu trc tiếp trên TableView
- Thiết lp chế cho phép chnh sa trc tiếp d liu:
table.setEditable(boolean value);
- Cài ặt môi trường chnh sa cho d liu ti các ô trong ct
Môi trường chnh sa d liu trong một ô khi người dùng click úp vào có thể
TextFieldTableCell (ging TextField), ComboBoxTableCell,
CheckBoxTableCell... Đây là các lớp thuc gói javafx.scene.control.cell.
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
Vd: lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
- Cài ặt x lý s kin khi bắt ầu, kết thúc hay b qua chnh sa ô:
Vd: lastNameCol.setOnEditStart(EventHandler value);
lastNameCol.setOnEditCommit(EventHandler value);
lastNameCol.setOnEditCancel(EventHandler value); Ví d:
import java.util.ArrayList; import java.util.List;
import javafx.application.Application; import
javafx.collections.FXCollections; import
javafx.collections.ObservableList; import
javafx.event.EventHandler; import javafx.scene.Scene;
import javafx.scene.control.TableColumn; import
javafx.scene.control.TableColumn.CellEditEvent; import
javafx.scene.control.TableView; import
javafx.scene.control.cell.CheckBoxTableCell; import
javafx.scene.control.cell.ComboBoxTableCell; import
javafx.scene.control.cell.PropertyValueFactory; import
javafx.scene.control.cell.TextFieldTableCell; import
javafx.scene.layout.GridPane; import
javafx.scene.layout.Priority; import
javafx.stage.Stage;
public class TableViewDemo extends Application {
@SuppressWarnings("unchecked")
@Override
public void start(Stage stage) {
TableView<Student> table = new TableView<Student>();
// Cho phØp chnh sa d liu trong bng vi
// cÆc ct thc hin setCellFactory
table.setEditable(true);
// Cho phép thay ổi kích thước bng + //
Kết hp setHgrow, setVgrow trong layout
table.setColumnResizePolicy(
TableView.CONSTRAINED_RESIZE_POLICY);
TableColumn<Student, String> codeCol =
new TableColumn<Student, String>("Msv");
TableColumn<Student, String> fullNameCol =
new TableColumn<Student, String>("H tŒn");
TableColumn<Student, String> lastNameCol =
new TableColumn<Student, String>("H m");
TableColumn<Student, String> firstNameCol =
new TableColumn<Student, String>("TŒn");
TableColumn<Student, String> genderCol =
new TableColumn<Student, String>("Gii tnh");
TableColumn<Student, Boolean> activeCol =
new TableColumn<Student, Boolean>("Kch hot");
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
// ThŒm 2 cột H ệm, TŒn vo cột H tŒn
fullNameCol.getColumns().addAll(lastNameCol, firstNameCol);
table.getColumns().addAll(codeCol, fullNameCol,
genderCol, activeCol);
// Bt cp 3 ct vi 3 thuc tính ã có
// d liu trong ối tượng sinh viŒn
codeCol.setCellValueFactory(new PropertyValueFactory<Student,
String>("code"));
lastNameCol.setCellValueFactory(
new PropertyValueFactory<Student, String>("lastName"));
firstNameCol.setCellValueFactory( new
PropertyValueFactory<Student, String>("firstName"));
// Cho phØp chnh sa d liệu trường H m qua TextField
lastNameCol.setCellFactory(
TextFieldTableCell.forTableColumn());
// X l s kin kết thœc việc chnh sa trong ct H m
lastNameCol.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<Student, String>>()
{
@Override
public void handle(CellEditEvent<Student, String> event)
{
System.out.println("Thay i h m: " + event.getOldValue()
+ " -> " + event.getNewValue());
// C¿p nh¿t vào ối tượng sinh viŒn
// tương ứng trong danh sÆch
String newLastName = event.getNewValue();
int row = event.getTablePosition().getRow();
Student std =
event.getTableView().getItems().get(row);
std.setLastName(newLastName);
}
});
// Cho phØp chnh sa d liệu trường "Kch hot" qua checkbox
activeCol.setCellFactory(
CheckBoxTableCell.forTableColumn(activeCol));
// Cho phØp chnh sa d liệu trường "Gii tnh" qua ComboBox
genderCol.setCellFactory(
ComboBoxTableCell.forTableColumn("Nam", "N"));
List<Student> studentList = getStudentList();
ObservableList<Student> obsList =
FXCollections.observableArrayList(studentList);
table.setItems(obsList);
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
GridPane root = new GridPane();
root.getChildren().add(table); GridPane.setHgrow(table,
Priority.ALWAYS); GridPane.setVgrow(table, Priority.ALWAYS);
stage.setTitle("Minh ha JavaFX TableView");
Scene scene = new Scene(root, 450, 300);
stage.setScene(scene);
stage.show();
}
private List<Student> getStudentList() {
List<Student> studentList = new ArrayList<Student>();
studentList.add(new Student("639313", "Hong", "Nguyn Vn"));
studentList.add(new Student("638811", "Ngc", "Vũ Vn"));
studentList.add(new Student("620835", "Hoa", "Nguyn Mai"));
studentList.add(new Student("622649", "Tun", "Đỗ Đức"));
return studentList;
}
public static void main(String[] args) {
launch(args);
}
}
public class Student {
private String code;
private String firstName;
private String lastName;
private String gender;
private boolean active;
public Student() {}
public Student(String code, String firstName, String lastName) {
this.code = code;
this.firstName = firstName;
this.lastName = lastName;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
lOMoARcPSD| 47028186
Website: http://hieutrantrung001100.blogspot.com/
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
}
Kết qu chạy chương trình:
| 1/20

Preview text:

lOMoAR cPSD| 47028186
Một số thành phần UI cơ bản trong JavaFX
Trong phần này, chúng tôi tập trung giới thiệu một số thành phần giao diện tương tác
(UI Control) thừa kế từ lớp javafx.scene.control.Control.
Các mô tả về một thành phần giao diện bao gồm các lớp cha, các thuộc tính, phương
thức của chính lớp ó hay thừa kế từ các lớp cha người lập trình cần tra cứu trong JavaFX API.
Thông thường ể hiểu và sử dụng một lớp, ta trước hết cần biết các thuộc tính của chính lớp ó,
các thuộc tính kế thừa từ các lớp cha, căn cứ vào các thuộc tính ó ta sẽ dễ dàng tra ra các
phương thức tác ộng vào thông qua các tham chiếu phương thức ính kèm của thuộc tính. Ví dụ:
Các thành phần giao diện tương tác thừa kế từ lớp javafx.scene.control.Control thuộc cây thừa kế: javafx.scene.Node javafx.scene.Parent javafx.scene.layout.Region javafx.scene.control.Control
Từ ó ta có thể liệt kê ược một số thuộc tính, phương thức chung sau:
Bảng một số thuộc tính, phương thức chung của các thành phần giao diện tương tác Phương thức Thuộc tính Lớp Control tooltip getTooltip, setTooltip Lớp Region
background, border, width, height, insets, maxWidth, maxHeight, minWidth,
getBackground, setBackground, getBorder, setBorder, minHeight, padding
getHeight, setHeight, getPadding, setPadding... Lớp Parent needsLayout isNeedsLayout, setNeedsLayout Lớp Node
id, disable, cursor, effect, focused, opacity, getId, setId, isDisable, setDisable, getEffect, setEffect,
rotate, scene, style, visible, scaleX, scaleY, getStyle, getScene, setStyle, isVisible, setVisible, scaleZ, onDragEntered,
onKeyPressed, setOnDragEntered, setOnKeyPressed, onMouseClicked, setOnMouseClicked... onScroll, onZoom  JavaFX Label
Label (Nhãn) trong JavaFX ược sử dụng ể hiển thị nội dung văn bản, hình ảnh, ký tự,
nó không cho phép người dùng chỉnh sửa trực tiếp nội dung.
Các thuộc tính, constructor, phương thức của lớp javafx.scene.control.Label:
Bảng các thuộc tính, constructor, phương thức của lớp javafx.scene.control.Label
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186 Constructor/Phương thức Mô tả Thuộc tính Label()
Tạo nhãn không có nội dung Label(String text)
Tạo nhãn với nội dung là chuỗi truyền vào Label(String text,
Tạo nhãn với nội dung là chuỗi truyền vào và một Node ồ họa Node graphic) labelFor getLabelFor()
Lấy giá trị thuộc tính labelFor setLabelFor(Node value)
Gắn nhãn với một Node. Thường dùng ể có thể tương tác với Node qua bàn phím
Một số thuộc tính, phương thức của lớp Label thừa kế từ lớp javafx.scene.control. Labeled:
Bảng các thuộc tính, constructor, phương thức của lớp Label thừa kế từ lớp javafx.scene.control. Labeled Thuộc tính Phương thức Mô tả text setText(String value)
Thiết lập nội dung cho nhãn getText()
Lấy giá trị nội dung văn bản của nhãn graphic setGraphic(Node value)
Thiết lập hình ảnh hiển thị alignment setAlignment(Pos value)
Thiết lập vị trí hiển thị. font setFont(Font value)
Thiết lập font chữ cho nhãn underLine setUnderline(boolean value)
Thiết lập kiểu gạch chân wrapText setWrapText(boolean value)
Thiết lập chế ộ tự xuống dòng nội dung nhãn textFill setTextFill(Paint value) Thiết lập màu chữ Ví dụ:
import java.io.File; import java.io.FileInputStream;
import javafx.application.Application; import
javafx.geometry.Pos; import javafx.scene.Scene;
import javafx.scene.control.Label; import
javafx.scene.image.Image; import
javafx.scene.image.ImageView; import
javafx.scene.layout.VBox; import
javafx.scene.paint.Color; import
javafx.scene.text.Font; import javafx.stage.Stage;
public class JavaFXLabel extends Application { @Override
public void start(Stage stage) throws Exception{
Label label1 = new Label();
label1.setGraphic(new ImageView(new Image(new FileInputStream(new
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186
File("E:\\Hinh Anh\\fita-logo.png")))));
label1.setMaxWidth(55); label1.setAlignment(Pos.CENTER);
Label label2 = new Label();
label2.setText("http://fita.vnua.edu.vn");
label2.setTextFill(Color.BLUE); label2.setFont(new Font("Arial",
20)); label2.setAlignment(Pos.CENTER);
// Vbox: layout sắp cÆc thnh phần chứa bŒn trong theo chiều dọc
VBox vBox = new VBox(label1, label2); vBox.setSpacing(12);
vBox.setAlignment(Pos.CENTER);
Scene scene = new Scene(vBox, 300, 300);
stage.setTitle("Khoa CNTT - VNUA");
stage.setScene(scene); stage.show();
} public static void main(String[] args) { launch(args); } }
Kết quả chạy chương trình:  JavaFX Button
Trong JavaFX lớp Button (Nút nhấn) ược sử dụng ể xử lý một hành ộng khi người dùng
nhấp vào một nút nào ó trên giao diện. Nhãn của Button có thể là văn bản, ồ họa hay cả hai.
Một số thuộc tính, constructor, phương thức của lớp javafx.scene.control.Button:
Bảng một số thuộc tính, constructor, phương thức của lớp javafx.scene.control.Button Thuộc tính
Constructor/Phương thức Mô tả Button()
Tạo nhãn không có nội dung Button(String text)
Tạo nút nhấn với nhãn là chuỗi truyền vào
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186 Button(String text, Node graphic)
Tạo nút nhấn với nội dung là chuỗi truyền vào và một Node ồ họa cancelButton isCancelButton()
Kiểm tra một nút nhấn có thuộc kiểu setCancelButton(boolean
Thiết lập cho một nút nhấn có khả năng nhận sự kiện phím ESC. Ví dụ value)
sau sẽ in ra Console thông iệp Button cancelButton = new Button("Cancel");
cancelButton.setCancelButton(true);
cancelButton.setOnAction(e -> {
System.out.println("Cancel clicked."); });
defaultButton isDefaultButton()
Kiểm tra một nút nhấn có thuộc kiểu setDefaultButton(boolean
Thiết lập cho một nút nhấn có khả năng nhận sự kiện phím Enter. value)
Một số thuộc tính, phương thức của lớp Button thừa kế từ lớp javafx.scene.control. ButtonBase:
Bảng một số thuộc tính, phương thức của lớp Button thừa kế từ lớp javafx.scene.control. ButtonBase
Thuộc tính Constructor/Phương thức Mô tả onAction getOnAction()
Lấy giá trị thuộc tính onAction
Xử lý sự kiện khi nút nhấn ược kích hoạt (fire)
setOnAction(EventHandler value)
Một số thuộc tính, phương thức của lớp Button thừa kế từ lớp javafx.scene.control.
Labeled tương tự như thành phần Label. Ví dụ:
(Xem ví dụ minh họa JavaFX ở ầu chương)  JavaFX CheckBox
Trong JavaFX CheckBox thường ược sử dụng trong trường hợp cho phép lựa chọn
nhiều tùy chọn cùng một lúc, mỗi CheckBox trong JavaFX có thể phản ánh 2 trạng thái (có/
không) hoặc 3 trạng thái (có/không/không xác ịnh) tùy thuộc việc cấu hình.
Một số thuộc tính, constructor, phương thức của lớp javafx.scene.control.CheckBox:
Bảng một số thuộc tính, constructor, phương thức của lớp javafx.scene.control.CheckBox Thuộc tính Constructor/Phương thức Mô tả CheckBox()
Tạo CheckBox không có nhãn
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186 CheckBox(String text)
Tạo CheckBox với nhãn là chuỗi truyền vào selected isSelected()
Kiểm tra một CheckBox có ược check hay không setSelected(boolean value)
Thiết lập trạng thái check hay không check cho CheckBox indeterminate isIndeterminate()
Kiểm tra một CheckBox có ang ở trạng thái xác ịnh= hay không
setIndeterminate(boolean value)
Thiết lập trạng thái allowIndeterminate isAllowIndeterminate()
Kiểm tra một CheckBox có cho phép trạng thái xác ịnh= hay không setAllowIndeterminate(boolean
Thiết lập CheckBox cho phép trạng thái value)
ịnh= xuất hiện. Ví dụ:
CheckBox cbox = new CheckBox("Indeterminate CheckBox");
cbox.setAllowIndeterminate(true);
Một số thuộc tính, phương thức của lớp CheckBox thừa kế từ lớp javafx.scene.control.
ButtonBase, javafx.scene.control.Labeled tương tự như lớp javafx.scene.control.Button Ví dụ: @Override
public void start(Stage stage) {
VBox root = new VBox();
Label label = new Label("LIST BOOK");
CheckBox checkBox1 = new CheckBox("Java Book");
checkBox1.setAllowIndeterminate(true); CheckBox
checkBox2 = new CheckBox("C# Book");
checkBox2.setAllowIndeterminate(true);
CheckBox checkBox3 = new CheckBox("Python Book");
checkBox3.setAllowIndeterminate(true);
root.setSpacing(10); root.setPadding(new Insets(15));
root.getChildren().addAll(label, checkBox1, checkBox2, checkBox3);
Scene scene = new Scene(root, 200, 200);
stage.setTitle("JavaFX CheckBox Demo");
stage.setScene(scene); stage.show(); }
Bạn ọc tự hoàn thiện thêm khung chương trình căn bản như các ví dụ trước. Kết quả chạy chương trình:
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186
Nội dung các CheckBox trong ví dụ cho biết, trong danh sách hiện ã có cuốn sách C#,
cuốn Python chưa có và cuốn Java chưa xác ịnh ược ã có hay chưa.
JavaFX ToggleButton
ToggleButton là một loại nút nhấn có 2 trạng thái, ược lựa chọn hoặc không ược lựa
chọn. Các ToggleButton có thể ược ặt trong một nhóm (Toggle Group), các ToggleButton trong
cùng một nhóm tại một thời iểm chỉ có nhiều nhất một nút ược chọn, nếu một nút nhấn ược
chọn, các nút nhấn khác trong nhóm sẽ bị mất lựa chọn. Một số
thuộc tính, constructor, phương thức của lớp
javafx.scene.control.ToggleButton:
Bảng một số thuộc tính, constructor, phương thức của lớp javafx.scene.control.ToggleButton Thuộc tính Constructor/Phương thức Mô tả ToggleButton()
Tạo ToggleButton không có nhãn ToggleButton (String text)
Tạo ToggleButton với nhãn là chuỗi truyền vào ToggleButton(String
text, Node Tạo ToggleButton với nội dung là chuỗi truyền vào và một graphic) Node ồ họa selected isSelected()
Kiểm tra một ToggleButton có ược chọn hay không
Thiết lập trạng thái ược chọn hay không cho setSelected(boolean value) ToggleButton toggleGroup getToggleGroup()
Lấy giá trị thuộc tính toggleGroup cho biết ToggleButton hiện tại thuộc nhóm nào
Gán ToggleButton vào một nhóm
setToggleGroup(ToggleGroup value)
Lớp ToggleButton cũng thừa kế các thuộc tính, phương thức từ lớp javafx.scene.control.
ButtonBase, javafx.scene.control.Labeled. Ví dụ: @Override
public void start(Stage stage) {
HBox root = new HBox();
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186
root.setPadding(new Insets(10)); root.setSpacing(5); // Tạo ToggleGroup
ToggleGroup group = new ToggleGroup();
ToggleButton maleBtn = new ToggleButton("Nam");
ToggleButton femaleBtn = new ToggleButton("Nữ");
// Đặt cÆc ToggleButton vo nhm.
maleBtn.setToggleGroup(group); femaleBtn.setToggleGroup(group);
// Đặt lựa chọn mặc ịnh
maleBtn.setSelected(true);
root.getChildren().add(new Label("Giới
tnh:")); root.getChildren().addAll(maleBtn,
femaleBtn); Scene scene = new Scene(root, 300, 60);
stage.setTitle("Minh họa JavaFX
ToggleButton"); stage.setScene(scene); stage.show(); }
Kết quả chạy chương trình:  JavaFX RadioButton
RadioButton trong JavaFX ược sử dụng ể cho phép người dùng thực hiện chỉ duy nhất
một lựa chọn trong một nhóm danh sách lựa chọn. Muốn nhóm nhiều RadioButton lại với nhau
chúng ta cần sử dụng ToggleGroup.
Các constructor của lớp javafx.scene.control.ToggleButton:
Bảng 7.8. Các constructor của lớp javafx.scene.control.ToggleButton Constructor Mô tả RadioButton()
Tạo RadioButton không có nhãn RadioButton(String text)
Tạo RadioButton với nhãn là chuỗi truyền vào
Lớp RadioButton cũng thừa kế các thuộc tính, phương thức từ lớp
javafx.scene.control.ToggleButton, javafx.scene.control. ButtonBase, javafx.scene.control.Labeled. Ví dụ: @Override
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186
public void start(Stage stage) {
HBox root = new HBox();
// Tạo cÆc RadioButton v thŒm vo nhm
ToggleGroup group = new ToggleGroup();
RadioButton button1 = new RadioButton("Green");
button1.setToggleGroup(group);
RadioButton button2 = new RadioButton("Yellow");
button2.setToggleGroup(group);
RadioButton button3 = new RadioButton("Red");
button3.setToggleGroup(group); // Thiết l¿p mặc ịnh
button1.setSelected(true); root.setStyle("-fx- background-color: #00FF00;");
// Xử l sự kiện thay ổi lựa chọn RadioButton trong group
group.selectedToggleProperty().addListener(new ChangeListener() {
public void changed(ObservableValue<? extends Toggle> ov,
Toggle old_toggle, Toggle new_toggle) { if
(group.getSelectedToggle() != null) {
RadioButton selectedRadio = (RadioButton)
group.getSelectedToggle(); switch
(selectedRadio.getText()) { case "Green":
root.setStyle("-fx-background-color: #00FF00;"); break; case "Yellow":
root.setStyle("-fx-background-color: #FFFF00;"); break; case "Red":
root.setStyle("-fx-background-color: #FF0000;"); break; default:
root.setStyle("-fx-background-color: #FAF8CC;"); break; } } } }); root.setSpacing(5);
root.setAlignment(Pos.CENTER);
root.getChildren().addAll(button1, button2, button3);
Scene scene = new Scene(root, 300, 100);
stage.setTitle("Minh họa JavaFX RadioButton");
stage.setScene(scene); stage.show();
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186 }
Kết quả chạy chương trình:  JavaFX ChoiceBox
Lớp ChoiceBox trong JavaFX ược sử dụng ể trình bày cho người dùng một tập hợp các
lựa chọn ược xác ịnh trước và người dùng chỉ ược ưa ra một lựa chọn. Theo mặc ịnh ChoiceBox
không có mục nào ược chọn trừ khi ược cài ặt trước.
Một số thuộc tính, constructor, phương thức của lớp javafx.scene.control.ChoiceBox:
Bảng một số thuộc tính, constructor, phương thức của lớp javafx.scene.control.ChoiceBox
Constructor/Phương thức Thuộc tính Mô tả ChoiceBox()
Tạo ChoiceBox với danh sách lựa chọn rỗng
ChoiceBox(ObservableList items)
Tạo ChoiceBox với danh sách lựa chọn truyền
vào. Danh sách gắn kèm ChoiceBox là một danh
sách các ối tượng nào ó, giá trị ược hiển thị
trên ChoiceBox tùy thuộc vào giá trị trả lại của
phương thức toString trong cài ặt của ối tượng ó items getItems()
Lấy danh sách lựa chọn gắn với ChoiceBox
setItems(ObservableList value)
Thiết lập danh sách lựa chọn cho ChoiceBox
selectionModel getSelectionModel()
Lấy giá trị thuộc tính selectionModel. Thuộc tính
này là mô hình quản lý dữ liệu của ChoiceBox, nó
chỉ cho phép chọn một lựa chọn, cho phép thiết
lập lựa chọn mặc ịnh hoặc theo dõi sự lựa chọn từ danh sách
setSelectionModel(SingleSelectionModel Thiết lập giá trị cho value) thuộc tính selectionModel value getValue()
Lấy giá trị thuộc tính value (thuộc tính ứng với
giá trị ang ược chọn trên ChoiceBox) là một thể
hiện của ối tượng T trong ObservableList setValue(T)
Gán giá trị cho thuộc tính value
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186 Ví dụ:
import javafx.application.Application; import
javafx.beans.value.ChangeListener; import
javafx.beans.value.ObservableValue; import
javafx.collections.FXCollections; import
javafx.collections.ObservableList; import
javafx.geometry.Insets; import javafx.scene.Scene; import
javafx.scene.control.ChoiceBox; import
javafx.scene.control.Label; import
javafx.scene.layout.HBox; import javafx.stage.Stage;
public class ChoiceBoxDemo extends Application {
@Override public void start(Stage
primaryStage) { ProgrammingLanguage
java = new ProgrammingLanguage("PL01", "Java");
ProgrammingLanguage cSharp = new ProgrammingLanguage("PL02", "C#");
ProgrammingLanguage ruby = new ProgrammingLanguage("PL03", "Ruby");
ProgrammingLanguage python = new ProgrammingLanguage("PL04", "Python");
HBox root = new HBox();
Label label = new Label("Select Programming Language: ");
Label selectedPL = new Label(); ObservableList languages //
= FXCollections.observableArrayList(cSharp, java, ruby, python);
ChoiceBox choiceBox = new
ChoiceBox(languages); // Đặt lựa chọn
mặc ịnh choiceBox.setValue(java);
selectedPL.setText(java.getCode() + "-" + java.getName());
ChangeListener changeListener = new ChangeListener() { @Override
public void changed(ObservableValue<? extends
ProgrammingLanguage> observable, //
ProgrammingLanguage oldValue, ProgrammingLanguage newValue) {
// Hiển thị mª v tŒn ngn ngữ ược chọn ProgrammingLanguage selected = choiceBox.getValue();
selectedPL.setText(selected.getCode() + " - " + selected.getName()); } };
// Sự kiện khi thay ổi Item trŒn ChoiceBox
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186
choiceBox.getSelectionModel().selectedItemProperty().addListener(changeList
ener); root.getChildren().addAll(label, choiceBox, selectedPL);
root.setPadding(new Insets(20)); root.setSpacing(5);
primaryStage.setTitle("Minh họa JavaFX ChoiceBox");
Scene scene = new Scene(root, 370, 100);
primaryStage.setScene(scene); primaryStage.show();
} public static void main(String[] args) { launch(args); } }
public class ProgrammingLanguage {
private String code; private String name;
public ProgrammingLanguage() {
} public ProgrammingLanguage(String code, String
name) { this.code = code; this.name = name; } public String getCode() { return code;
} public void setCode(String
code) { this.code = code; } public String getName() { return name;
} public void setName(String
name) { this.name = name; } @Override public String toString() {
return this.name; } }
Kết quả chạy chương trình:
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186  JavaFX TextField
TextField trong JavaFX ược sử dụng ể cho phép người dùng nhập một dòng văn bản
không sử dụng ịnh dạng. JavaFX TextField thuộc gói javafx.scene.control, nó thừa kế từ lớp
javafx.scene.control.TextInputControl.
Một số thuộc tính, constructor, phương thức của lớp javafx.scene.control.TextField:
Bảng một số thuộc tính, constructor, phương thức của lớp javafx.scene.control.TextField
Thuộc tính Constructor/Phương thức Mô tả TextField()
Tạo TextField với dòng text nội dung rỗng TextField(String text)
Tạo TextField với dòng text nội dung là chuỗi truyền vào alignment getAlignment()
Lấy giá trị thuộc tính alignment (thuộc tính căn
chỉnh nội dung văn bản trong ô) setAlignment(Pos value)
Thiết lập giá trị cho thuộc tính alignment onAction getOnAction()
Lấy giá trị thuộc tính bắt sự kiện kết thúc nhập text trong ô và bấm Enter
Thiết lập xử lý sự kiện kết thúc nhập text trong ô
setOnAction(EventHandler value) và bấm Enter
Một số thuộc tính, phương thức thừa kế từ lớp TextInputControl:
Bảng một số thuộc tính, phương thức thừa kế từ lớp TextInputControl Thuộc tính Phương thức Mô tả anchor getAnchor()
Lấy giá trị số ký tự tính từ ầu ến vị trí con trỏ soạn
thảo trừ i số ký tự ang ược bôi en
caretPosition getCaretPosition()
Lấy giá trị số ký tự tính từ ầu ến vị trí con trỏ soạn thảo editable isEditable()
Kiểm tra giá trị thuộc tính editable (trạng thái có
cho phép chỉnh sửa ô TextField hay không) setEditable(boolean value)
Thiết lập giá trị cho thuộc tính editable font getFont()
Lấy giá trị thuộc tính font chữ cho text setFont(Font value)
Thiết lập font chữ cho text length getLength()
Lấy giá trị ộ dài text (số ký tự) promptText getPromptText()
Lấy giá trị thuộc tính promptText (text chú thích cho ô TextField)
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186 setPromptText(String value)
Thiệt lập giá trị cho thuộc tính promptText selectedText getSelectedText()
Lấy giá trị oạn text ang ược bôi en trong ô selection getSelection()
Lấy giá trị vị trí bắt ầu, vị trí kết thúc của oạn text ang ược bôi en text getText()
Lấy giá trị thuộc tính text (oạn văn bản chứa trong ô) setText(String value)
Thiết lập giá trị cho thuộc tính text Ví dụ: @Override
public void start(Stage stage) { Label
label = new Label(); label.setMaxWidth(300);
label.setText("ĐNG NH¾P TRANG SINH VI˚N");
label.setAlignment(Pos.CENTER);
TextField textField = new TextField();
textField.setMaxWidth(200); textField.setMinHeight(25);
textField.setPromptText("Nh¿p mª sinh viŒn v nhấn Enter"); // V
hiệu ha trạng thÆi focus mặc ịnh ể hiển thị prompt text
textField.setFocusTraversable(false);
// Xử l sự kiện kết thœc nh¿p v nhấn Enter
textField.setOnAction(new EventHandler() { @Override
public void handle(ActionEvent event) {
System.out.println("Kiểm tra mª sinh viŒn: " + textField.getText()); } });
VBox vBox = new VBox(label, textField);
vBox.setSpacing(10); vBox.setAlignment(Pos.CENTER);
Scene scene = new Scene(vBox, 300, 80);
stage.setTitle("Minh họa JavaFX TextField");
stage.setScene(scene); stage.show(); }
Kết quả chạy chương trình:
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186
JavaFX PasswordField
Password Field trong JavaFX thường ược dùng ể nhập mật khẩu, các ký tự nhập vào sẽ
ược ẩn bằng cách hiển thị một chuỗi dấu sao. Lớp PasswordField thuộc gói
javafx.scene.control, nó thừa kế từ lớp TextField.
Lớp PasswordField chỉ có duy nhất một constructor không tham số, không có thuộc
tính riêng, nó ghi è phương thức cut và copy của lớp TextInputControl ể không cho phép cut, copy. Ví dụ:
@Override public void start(Stage stage) {
TextField textField = new TextField(); textField.setMinWidth(200);
textField.setPromptText("Nh¿p m¿t khẩu...");
textField.setFocusTraversable(false);
textField.setLayoutX(20); textField.setLayoutY(20);
textField.setVisible(false);
// Trường password trøng vị trí, kích thước với trường text
PasswordField passwordField = new PasswordField();
passwordField.setMinWidth(200);
passwordField.setPromptText("Nh¿p m¿t khẩu...");
passwordField.setFocusTraversable(false);
passwordField.setLayoutX(20); passwordField.setLayoutY(20);
CheckBox checkBox = new CheckBox();
checkBox.setText("Hiển thị");
checkBox.setLayoutX(20); checkBox.setLayoutY(50);
// Xử l sự kiện click vo checkbox checkBox.setOnAction(new EventHandler() { @Override
public void handle(ActionEvent event) { boolean selected =
checkBox.isSelected(); // Điều khiển việc ẩn hiện của trường password, text
textField.setVisible(selected);
passwordField.setVisible(!selected);
// Copy nội dung passwordfield -> textfield if(selected) {
textField.setText(passwordField.getText());
}else {// Copy nội dung textfield -> passwordfield
passwordField.setText(textField.getText()); } } });
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186
AnchorPane anchorPane = new AnchorPane(textField, passwordField, checkBox);
Scene scene = new Scene(anchorPane, 300, 100);
stage.setTitle("Minh họa JavaFX PasswordField");
stage.setScene(scene); stage.show(); }
Kết quả chạy chương trình:  JavaFX TableView
JavaFX cung cấp lớp TableView, nó ược sử dụng cùng với TableColumn và TableCell
giúp bạn hiển thị dữ liệu dưới dạng bảng. TableColumn ứng với một cột trong bảng, TableCell
ứng với một ô trong bảng. + Khởi tạo TableView
// Tạo mới TableView hiển thị danh sách ối tượng sinh viŒn
TableView table = new TableView(); + Thêm cột vào TableView
// Tạo cột mª sinh viŒn, kiểu dữ liệu String TableColumn codeCol = new TableColumn("Msv");
table.getColumns().add(codeCol);
Có thể dùng phương thức addAll(col1, col2, ...) ể thêm cùng lúc nhiều cột vào bảng.
Có thể nhóm các cột lại với nhau trước khi thêm vào bảng:
// Tạo cột FullName (Kiểu dữ liệu String) TableColumn fullNameCol
= new TableColumn("Họ tŒn");
// Tạo 2 cột con cho cột FullName TableColumn lastNameCol
= new TableColumn("Họ ệm"); TableColumn firstNameCol
= new TableColumn("TŒn");
// ThŒm 2 cột con vo cột FullName
fullNameCol.getColumns().addAll(lastNameCol, firstNameCol);
// ThŒm cột FullName vo bảng table.add(fullNameCol);
+ Hiển thị danh sách dữ liệu lên TableView
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186 -
Tạo ối tượng Student với các trường mã sinh viên (code), email, họ ệm
(firstName), tên (lastName), lớp (class_) cùng các phương thức get, set -
Bắt cặp các cột của TableView với các thuộc tính của Student Ví dụ:
codeCol.setCellValueFactory(new PropertyValueFactoryString>("code"));
firstNameCol.setCellValueFactory(new PropertyValueFactoryString>("firstName")); - Chuyển kiểu
danh sách ối tượng Student sang kiểu ObservableList Ví dụ:
List studentList = getStudentList();
ObservableList obsStudentList =
FXCollections.observableArrayList(studentList); - Thêm danh sách ObservableList vào TableView
table.setItems(obsStudentList);
+ Lấy vị trí dòng ang ược chọn trên TableView int selectedIndex =
table.getSelectionModel().getSelectedIndex();
+ Lấy ối tượng ứng với dòng ang ược chọn trên TableView
Student selectedItem = table.getSelectionModel().getSelectedItem(); Hoặc:
Student selectedItem = table .getItems().get(selectedIndex);
+ Thêm, cập nhật, xóa dữ liệu một dòng trong dữ liệu của TableView -
Thêm một hoặc một vài dòng: table.getItems().add(student1);
table.getItems().addAll(student1, student2, ...); - Cập nhật:
table.getItems().set(, liệu mới c¿p nh¿t>); - Xóa: table.getItems().remove();
+ Chỉnh sửa dữ liệu trực tiếp trên TableView -
Thiết lập chế ộ cho phép chỉnh sửa trực tiếp dữ liệu:
table.setEditable(boolean value); -
Cài ặt môi trường chỉnh sửa cho dữ liệu tại các ô trong cột
Môi trường chỉnh sửa dữ liệu trong một ô khi người dùng click úp vào có thể là TextFieldTableCell (giống TextField), ComboBoxTableCell,
CheckBoxTableCell... Đây là các lớp thuộc gói javafx.scene.control.cell.
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186
Vd: lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn()); -
Cài ặt xử lý sự kiện khi bắt ầu, kết thúc hay bỏ qua chỉnh sửa ô:
Vd: lastNameCol.setOnEditStart(EventHandler value);
lastNameCol.setOnEditCommit(EventHandler value);
lastNameCol.setOnEditCancel(EventHandler value); Ví dụ:
import java.util.ArrayList; import java.util.List;
import javafx.application.Application; import
javafx.collections.FXCollections; import
javafx.collections.ObservableList; import
javafx.event.EventHandler; import javafx.scene.Scene;
import javafx.scene.control.TableColumn; import
javafx.scene.control.TableColumn.CellEditEvent; import
javafx.scene.control.TableView; import
javafx.scene.control.cell.CheckBoxTableCell; import
javafx.scene.control.cell.ComboBoxTableCell; import
javafx.scene.control.cell.PropertyValueFactory; import
javafx.scene.control.cell.TextFieldTableCell; import
javafx.scene.layout.GridPane; import
javafx.scene.layout.Priority; import javafx.stage.Stage;
public class TableViewDemo extends Application {
@SuppressWarnings("unchecked") @Override
public void start(Stage stage) {
TableView table = new TableView();
// Cho phØp chỉnh sửa dữ liệu trong bảng với
// cÆc cột thực hiện setCellFactory
table.setEditable(true);
// Cho phép thay ổi kích thước bảng + //
Kết hợp setHgrow, setVgrow trong layout table.setColumnResizePolicy(
TableView.CONSTRAINED_RESIZE_POLICY); TableColumn codeCol =
new TableColumn("Msv"); TableColumn fullNameCol =
new TableColumn("Họ tŒn"); TableColumn lastNameCol =
new TableColumn("Họ ệm"); TableColumn firstNameCol =
new TableColumn("TŒn"); TableColumn genderCol =
new TableColumn("Giới tnh"); TableColumn activeCol =
new TableColumn("Kch hoạt");
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186
// ThŒm 2 cột Họ ệm, TŒn vo cột Họ tŒn
fullNameCol.getColumns().addAll(lastNameCol, firstNameCol);
table.getColumns().addAll(codeCol, fullNameCol, genderCol, activeCol);
// Bắt cặp 3 cột với 3 thuộc tính ã có
// dữ liệu trong ối tượng sinh viŒn
codeCol.setCellValueFactory(new PropertyValueFactoryString>("code"));
lastNameCol.setCellValueFactory(
new PropertyValueFactory("lastName"));
firstNameCol.setCellValueFactory( new
PropertyValueFactory("firstName"));
// Cho phØp chỉnh sửa dữ liệu trường Họ ệm qua TextField lastNameCol.setCellFactory(
TextFieldTableCell.forTableColumn());
// Xử l sự kiện kết thœc việc chỉnh sửa trong cột Họ ệm lastNameCol.setOnEditCommit( new EventHandler>() { @Override
public void handle(CellEditEvent event) {
System.out.println("Thay ổi họ ệm: " + event.getOldValue()
+ " -> " + event.getNewValue());
// C¿p nh¿t vào ối tượng sinh viŒn
// tương ứng trong danh sÆch
String newLastName = event.getNewValue();
int row = event.getTablePosition().getRow(); Student std =
event.getTableView().getItems().get(row); std.setLastName(newLastName); } });
// Cho phØp chỉnh sửa dữ liệu trường "Kch hoạt" qua checkbox activeCol.setCellFactory(
CheckBoxTableCell.forTableColumn(activeCol));
// Cho phØp chỉnh sửa dữ liệu trường "Giới tnh" qua ComboBox genderCol.setCellFactory(
ComboBoxTableCell.forTableColumn("Nam", "Nữ"));
List studentList = getStudentList(); ObservableList obsList =
FXCollections.observableArrayList(studentList); table.setItems(obsList);
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186
GridPane root = new GridPane();
root.getChildren().add(table);
GridPane.setHgrow(table,
Priority.ALWAYS);
GridPane.setVgrow(table, Priority.ALWAYS);
stage.setTitle("Minh họa JavaFX TableView");
Scene scene = new Scene(root, 450, 300); stage.setScene(scene); stage.show(); }
private List getStudentList() {
List studentList = new ArrayList();
studentList.add(new Student("639313", "Hong", "Nguyễn Vn"));
studentList.add(new Student("638811", "Ngọc", "Vũ Vn"));
studentList.add(new Student("620835", "Hoa", "Nguyễn Mai"));
studentList.add(new Student("622649", "Tun", "Đỗ Đức")); return studentList; }
public static void main(String[] args) { launch(args); } }
public class Student { private String code;
private String firstName;
private String lastName; private String gender;
private boolean active; public Student() {}
public Student(String code, String firstName, String lastName) { this.code = code;
this.firstName = firstName;
this.lastName = lastName; }
public String getCode() { return code; }
public void setCode(String code) { this.code = code; }
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) {
this.firstName = firstName;
Website: http://hieutrantrung001100.blogspot.com/ lOMoAR cPSD| 47028186 }
public String getLastName() { return lastName; }
public void setLastName(String lastName) {
this.lastName = lastName; }
public String getGender() { return gender; }
public void setGender(String gender) { this.gender = gender; }
public boolean isActive() { return active; }
public void setActive(boolean active) { this.active = active; } }
Kết quả chạy chương trình:
Website: http://hieutrantrung001100.blogspot.com/