Menambah Shortcut, Membuat Kerangka UI & Mencoba Logic Dialog

* Shortcut F5: Cari Barang & F6: Cari Pelanggan, serta CTRL+L: Logout
* Form: Login
* Dialog Cari Barang & Dialog Cari Pelanggan
pull/1/head
Ronaldo Christnawan 6 years ago
parent 49f0683a20
commit 8b5e24bd36

@ -23,7 +23,7 @@ public class App extends Application {
// var label = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
Locale.setDefault(Locale.forLanguageTag("in-ID"));
Parent root = FXMLLoader.load(getClass().getResource("/fxml/FormUtama.fxml"));
Parent root = FXMLLoader.load(getClass().getResource("/fxml/FormLogin.fxml"));
Scene scene = new Scene(root);

@ -1,20 +1,30 @@
package id.amigogroup.posterminal;
import id.amigogroup.posterminal.pencarian.DialogCariBarangController;
import id.amigogroup.posterminal.pencarian.DialogCariPelangganController;
import id.amigogroup.posterminal.util.Fucout;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class FormUtamaController implements Initializable {
@ -38,15 +48,47 @@ public class FormUtamaController implements Initializable {
private void initShorcuts() {
Map<KeyCombination,Runnable> listShortcuts = new HashMap<>();
KeyCombination kcCariBarang = new KeyCodeCombination(KeyCode.F5);
Runnable rnCariBarang = () -> {
DialogCariBarangController dialogCariBarang = new DialogCariBarangController();
dialogCariBarang.initOwner((Stage) bpMain.getScene().getWindow());
Optional<String> result = dialogCariBarang.showAndWait();
System.out.println(result);
};
listShortcuts.put(kcCariBarang, rnCariBarang);
KeyCombination kcCariPelanggan = new KeyCodeCombination(KeyCode.F6);
Runnable rnCariPelanggan = () -> {
DialogCariPelangganController dialogCariPelanggan = new DialogCariPelangganController();
dialogCariPelanggan.initOwner((Stage) bpMain.getScene().getWindow());
Optional<String> result = dialogCariPelanggan.showAndWait();
System.out.println(result);
};
listShortcuts.put(kcCariPelanggan, rnCariPelanggan);
KeyCombination kcCheckout = new KeyCodeCombination(KeyCode.F8);
Runnable rnCheckout = () -> setContent(formFactory.getForm(FormConstanta.BAYAR, this));
listShortcuts.put(kcCheckout, rnCheckout);
KeyCombination kcLogout = new KeyCodeCombination(KeyCode.L,KeyCombination.CONTROL_DOWN);
Runnable rnLogout = () -> {
try {
generateNewWindow("/fxml/FormLogin.fxml").show();
Stage thisStage = (Stage) bpMain.getScene().getWindow();
thisStage.close();
} catch (IOException ex) {
Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, ex);
}
};
listShortcuts.put(kcLogout, rnLogout);
Platform.runLater(() -> {
bpMain.getScene().getAccelerators().putAll(listShortcuts);
});
}
public void setContent(Node node) {
try {
spMainContent.setContent(node);
@ -56,4 +98,16 @@ public class FormUtamaController implements Initializable {
// AlertGenerate.getAlert(AlertGenerate.FXML_FAIL).show();
}
}
public Stage generateNewWindow(String url) throws IOException {
Stage stage = new Stage();
Parent root;
root = FXMLLoader.load(getClass().getResource(url));
Scene scene = new Scene(root);
stage.setTitle(Fucout.APP_TITLE);
stage.getIcons().add(new Image(Fucout.APP_ICON));
stage.setScene(scene);
return stage;
}
}

@ -8,8 +8,6 @@ package id.amigogroup.posterminal.bayar;
import id.amigogroup.posterminal.util.Fucout;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;

@ -0,0 +1,66 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package id.amigogroup.posterminal.keamanan;
import id.amigogroup.posterminal.util.Fucout;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
/**
* FXML Controller class
*
* @author ronal
*/
public class FormLoginController implements Initializable {
@FXML
private AnchorPane apMain;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
}
public Stage generateNewWindow(String url) throws IOException {
Stage stage = new Stage();
Parent root;
root = FXMLLoader.load(getClass().getResource(url));
Scene scene = new Scene(root);
stage.setTitle(Fucout.APP_TITLE);
stage.getIcons().add(new Image(Fucout.APP_ICON));
stage.setScene(scene);
return stage;
}
@FXML
public void btnLoginOnAction(ActionEvent event) {
try {
generateNewWindow("/fxml/FormUtama.fxml").show();
Stage thisStage = (Stage) apMain.getScene().getWindow();
//close current stage
thisStage.hide();
} catch (IOException ex) {
Logger.getLogger(FormLoginController.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

@ -0,0 +1,100 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package id.amigogroup.posterminal.pencarian;
import id.amigogroup.posterminal.FormUtamaController;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Window;
/**
* FXML Controller class
*
* @author ronal
*/
public class DialogCariBarangController extends Dialog<String> implements Initializable {
@FXML
AnchorPane apContent;
@FXML
private TableView<TabelBarang> tbvBarang;
@FXML
private TableColumn<TabelBarang, String> tcKode;
@FXML
private TableColumn<TabelBarang, String> tcNama;
@FXML
private TableColumn<TabelBarang, String> tcNo;
@FXML
private TableColumn<TabelBarang, String> tcHarga;
@FXML
private TableColumn<TabelBarang, Button> tcBtnTambah;
final ObservableList<TabelBarang> daftarTabelBarang = FXCollections.observableArrayList();
// String str = "Halo";
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
tcKode.setCellValueFactory(new PropertyValueFactory<>("kode"));
tcNama.setCellValueFactory(new PropertyValueFactory<>("nama"));
tcNo.setCellValueFactory(new PropertyValueFactory<>("nomor"));
tcBtnTambah.setCellValueFactory(new PropertyValueFactory<>("btnTambah"));
tbvBarang.setItems(daftarTabelBarang);
fillTable(new ArrayList<>());
}
public DialogCariBarangController(/*FormPresensiController parent*/) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogCariBarang.fxml"));
loader.setController(this);
// DialogCariBarangController controller = loader.<DialogCariBarangController>getController();
Parent root = loader.load();
getDialogPane().setContent(root);
setTitle("Cari Barang");
// getDialogPane().getButtonTypes().add(ButtonType.CANCEL);
// setResultConverter(buttonType -> {
// return str;
// });
Window window = getDialogPane().getScene().getWindow();
window.setOnCloseRequest(event -> this.close());
} catch (IOException e) {
Logger.getLogger(DialogCariBarangController.class
.getName()).log(Level.SEVERE, null, e);
}
}
public void fillTable(List<TabelBarang> daftarBarang) {
Button btnTambah = new Button("Tambah");
btnTambah.setOnAction((event) -> {
setResult("Barang x");
this.close();
});
daftarTabelBarang.add(new TabelBarang("AACOBA001ABCDXL", "Barang x","79.900", "XL", btnTambah));
}
}

@ -0,0 +1,94 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package id.amigogroup.posterminal.pencarian;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Dialog;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Window;
/**
* FXML Controller class
*
* @author ronal
*/
public class DialogCariPelangganController extends Dialog<String> implements Initializable {
@FXML
AnchorPane apContent;
@FXML
private TableView<TabelPelanggan> tbvPelanggan;
@FXML
private TableColumn<TabelPelanggan, String> tcKode;
@FXML
private TableColumn<TabelPelanggan, String> tcNama;
@FXML
private TableColumn<TabelPelanggan, String> tcAlamat;
@FXML
private TableColumn<TabelPelanggan, String> tcUpline;
final ObservableList<TabelPelanggan> daftarTabelPelanggan = FXCollections.observableArrayList();
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
tcKode.setCellValueFactory(new PropertyValueFactory<>("kode"));
tcNama.setCellValueFactory(new PropertyValueFactory<>("nama"));
tcAlamat.setCellValueFactory(new PropertyValueFactory<>("nomor"));
tcUpline.setCellValueFactory(new PropertyValueFactory<>("upline"));
tbvPelanggan.setItems(daftarTabelPelanggan);
fillTable(new ArrayList<>());
}
public DialogCariPelangganController(/*FormPresensiController parent*/) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogCariPelanggan.fxml"));
loader.setController(this);
// DialogCariBarangController controller = loader.<DialogCariBarangController>getController();
Parent root = loader.load();
getDialogPane().setContent(root);
setTitle("Cari Barang");
// getDialogPane().getButtonTypes().add(ButtonType.CANCEL);
// setResultConverter(buttonType -> {
// return str;
// });
Window window = getDialogPane().getScene().getWindow();
window.setOnCloseRequest(event -> this.close());
} catch (IOException e) {
Logger.getLogger(DialogCariBarangController.class
.getName()).log(Level.SEVERE, null, e);
}
}
public void fillTable(List<TabelPelanggan> daftarBarang) {
// Button btnTambah = new Button("Tambah");
// btnTambah.setOnAction((event) -> {
// setResult("Pak Coba");
// this.close();
// });
daftarTabelPelanggan.add(new TabelPelanggan("0103201401", "Pak Coba","Jl. Wates Percobaan", "-"));
}
}

@ -0,0 +1,100 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package id.amigogroup.posterminal.pencarian;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.control.Button;
/**
*
* @author ronal
*/
public class TabelBarang {
private final SimpleStringProperty kode;
private final SimpleStringProperty nama;
private final SimpleStringProperty nomor;
private final SimpleStringProperty harga;
private final SimpleObjectProperty<Button> btnTambah;
public TabelBarang(String kode, String nama, String nomor,String harga,Button btnTambah) {
this.kode = new SimpleStringProperty(kode);
this.nama = new SimpleStringProperty(nama);
this.nomor = new SimpleStringProperty(nomor);
this.harga = new SimpleStringProperty(harga);
this.btnTambah = new SimpleObjectProperty<>(btnTambah);
}
/**
* @return the kode
*/
public String getKode() {
return kode.get();
}
/**
* @param kode the kode to set
*/
public void setKode(String kode) {
this.kode.set(kode);
}
/**
* @return the nama
*/
public String getNama() {
return nama.get();
}
/**
* @param nama the nama to set
*/
public void setNama(String nama) {
this.nama.set(nama);
}
/**
* @return the nomor
*/
public String getNomor() {
return nomor.get();
}
/**
* @param nomor the nomor to set
*/
public void setNomor(String nomor) {
this.nomor.set(nomor);
}
/**
* @return the nomor
*/
public String getHarga() {
return harga.get();
}
/**
* @param harga the nomor to set
*/
public void setHarga(String harga) {
this.harga.set(harga);
}
/**
* @return the btnTambah
*/
public Button getBtnTambah() {
return btnTambah.get();
}
/**
* @param btnTambah the btnTambah to set
*/
public void setBtnTambah(Button btnTambah) {
this.btnTambah.set(btnTambah);
}
}

@ -0,0 +1,84 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package id.amigogroup.posterminal.pencarian;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.control.Button;
/**
*
* @author ronal
*/
public class TabelPelanggan {
private final SimpleStringProperty kode;
private final SimpleStringProperty nama;
private final SimpleStringProperty alamat;
private final SimpleStringProperty upline;
public TabelPelanggan(String kode, String nama, String alamat,String upline) {
this.kode = new SimpleStringProperty(kode);
this.nama = new SimpleStringProperty(nama);
this.alamat = new SimpleStringProperty(alamat);
this.upline = new SimpleStringProperty(upline);
}
/**
* @return the kode
*/
public String getKode() {
return kode.get();
}
/**
* @param kode the kode to set
*/
public void setKode(String kode) {
this.kode.set(kode);
}
/**
* @return the nama
*/
public String getNama() {
return nama.get();
}
/**
* @param nama the nama to set
*/
public void setNama(String nama) {
this.nama.set(nama);
}
/**
* @return the no
*/
public String getNomor() {
return alamat.get();
}
/**
* @param no the no to set
*/
public void setNomor(String nomor) {
this.alamat.set(nomor);
}
/**
* @return the btnTambah
*/
public String getUpline() {
return upline.get();
}
/**
* @param upline the upline to set
*/
public void setUpline(String upline) {
this.upline.set(upline);
}
}

@ -16,7 +16,7 @@ import javafx.scene.control.TextField;
public class Fucout {
//STRINGS
public static final String APP_TITLE = "Pos Terminal";
public static final String APP_TITLE = "Pos Terminal Amigo";
//IMAGES URL
public static final String APP_ICON = "/assets/logo-mini-squared.png";

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" fx:id="apContent" minHeight="-Infinity" minWidth="-Infinity" prefHeight="450.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label layoutX="24.0" layoutY="24.0" text="Cari Barang" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="4.0">
<font>
<Font size="16.0" />
</font>
</Label>
<TextField layoutX="14.0" layoutY="56.0" promptText="Nama Barang" AnchorPane.leftAnchor="4.0" AnchorPane.rightAnchor="4.0" AnchorPane.topAnchor="46.0" />
<Label layoutX="14.0" layoutY="39.0" text="Nama Barang" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="29.0" />
<TableView fx:id="tbvBarang" layoutX="14.0" layoutY="91.0" AnchorPane.bottomAnchor="-5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="81.0">
<columns>
<TableColumn fx:id="tcKode" prefWidth="75.0" text="Kode" />
<TableColumn fx:id="tcNama" prefWidth="75.0" text="Nama" />
<TableColumn fx:id="tcNo" maxWidth="30.0" minWidth="30.0" prefWidth="30.0" resizable="false" text="No" />
<TableColumn fx:id="tcHarga" prefWidth="75.0" text="Harga" />
<TableColumn fx:id="tcBtnTambah" maxWidth="80.0" minWidth="80.0" resizable="false" text="Tambah" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" fx:id="apContent" minHeight="-Infinity" minWidth="-Infinity" prefHeight="450.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label layoutX="24.0" layoutY="24.0" text="Cari Pelanggan" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="4.0">
<font>
<Font size="16.0" />
</font>
</Label>
<TextField layoutX="14.0" layoutY="56.0" promptText="Nama Pelanggan" AnchorPane.leftAnchor="4.0" AnchorPane.rightAnchor="4.0" AnchorPane.topAnchor="46.0" />
<Label layoutX="14.0" layoutY="39.0" text="Nama Pelanggan" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="29.0" />
<TableView fx:id="tbvPelanggan" layoutX="14.0" layoutY="91.0" AnchorPane.bottomAnchor="-5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="81.0">
<columns>
<TableColumn fx:id="tcKode" prefWidth="75.0" text="Kode" />
<TableColumn fx:id="tcNama" prefWidth="75.0" text="Nama" />
<TableColumn fx:id="tcAlamat" text="Alamat" />
<TableColumn fx:id="tcUpline" prefWidth="75.0" text="Upline" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" fx:id="apMain" prefHeight="165.0" prefWidth="350.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.amigogroup.posterminal.keamanan.FormLoginController">
<children>
<Label layoutX="14.0" layoutY="14.0" text="Login" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="5.0">
<font>
<Font size="16.0" />
</font>
</Label>
<ImageView fitHeight="80.0" fitWidth="80.0" layoutX="14.0" layoutY="29.0" pickOnBounds="true" preserveRatio="true" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="29.0">
<image>
<Image url="@../assets/icons8-group-96.png" />
</image>
</ImageView>
<Label layoutX="104.0" layoutY="22.0" text="Nama Pengguna" AnchorPane.leftAnchor="104.0" AnchorPane.topAnchor="22.0" />
<TextField layoutX="104.0" layoutY="39.0" promptText="Nama Pengguna" AnchorPane.leftAnchor="104.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="39.0" />
<PasswordField layoutX="104.0" layoutY="86.0" promptText="Kata Sandi" AnchorPane.leftAnchor="104.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="86.0" />
<Label layoutX="104.0" layoutY="69.0" text="Kata Sandi" AnchorPane.leftAnchor="104.0" AnchorPane.topAnchor="69.0" />
<HBox alignment="CENTER" layoutY="122.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="122.0">
<children>
<Button mnemonicParsing="false" onAction="#btnLoginOnAction" text="Masuk" />
</children>
</HBox>
</children>
</AnchorPane>
Loading…
Cancel
Save