Il est nécessaire de déterminer les contraintes de cisaillement critiques en fonction du type de fixation et du rapport d'aspect de la plaque rectangulaire.
Commençons par configurer l'interface et nous demanderons à Scene Builder de vous aider.
Créons un espace de travail d'une taille de 900x600.
Créons plusieurs conteneurs avec des tailles et des marges (au début, je faisais le balisage juste sur un morceau de papier, mais le morceau était déjà perdu).
Ensuite, passons en revue les composants internes des conteneurs.
- Button Button
Attribuons un nom unique à notre bouton et le nom de la méthode dans laquelle nous implémenterons ensuite notre code
- TextField
Donnons à notre champ de texte un nom unique. Le champ est nécessaire pour l'entrée / la sortie de valeurs numériques. Nous ajouterons également un nom supplémentaire au champ, qui disparaîtra lorsqu'il sera saisi par un symbole
-
Champ d' étiquette J'ai utilisé le champ d' étiquette pour désigner les cellules.
- Champ d'image
Ici, nous spécifions le nom d'une image existante située dans le projet
- Champ CheckBox
Ici, nous spécifions un nom unique. Ceci est nécessaire pour déterminer le type de fixation
Code final pour le fichier sample.fxml
Liste sample.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<Pane prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
<Button fx:id="button" layoutX="40.0" layoutY="200.0" mnemonicParsing="false" onAction="#showDateTime" prefHeight="71.0" prefWidth="528.0" text="=" />
<VBox layoutX="312.0" layoutY="20.0" minHeight="-Infinity" minWidth="-Infinity" prefHeight="200.0" prefWidth="280.0" GridPane.columnIndex="1">
<children>
<TextField fx:id="myTextField1" promptText=" " />
<TextField fx:id="myTextField2" promptText=" b ( )" />
<TextField fx:id="myTextField3" promptText="" />
<TextField fx:id="myTextField4" prefHeight="25.0" prefWidth="280.0" promptText=" " />
<TextField fx:id="myTextField6" prefHeight="25.0" prefWidth="280.0" promptText=" " />
</children>
</VBox>
<VBox layoutX="611.0" prefHeight="562.0" prefWidth="271.0" GridPane.columnIndex="21">
<children>
<ImageView fx:id="image" fitHeight="116.0" fitWidth="174.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@Zadelka1.PNG" />
</image></ImageView>
<CheckBox fx:id="checkbox1" mnemonicParsing="false" text=" " />
<ImageView fitHeight="122.0" fitWidth="237.0" layoutX="30.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@Zadelka2.PNG" />
</image></ImageView>
<CheckBox fx:id="checkbox2" mnemonicParsing="false" text=" " />
<ImageView fitHeight="127.0" fitWidth="272.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@Zadelka3.PNG" />
</image></ImageView>
<CheckBox fx:id="checkbox3" mnemonicParsing="false" text=" " />
<ImageView fitHeight="129.0" fitWidth="392.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@Zadelka4.PNG" />
</image></ImageView>
<CheckBox fx:id="checkbox4" mnemonicParsing="false" text=" " />
</children>
</VBox>
<VBox layoutX="20.0" layoutY="20.0" minHeight="-Infinity" minWidth="-Infinity" prefHeight="200.0" prefWidth="262.0">
<children>
<Label prefHeight="25.0" prefWidth="185.0" text=" a" />
<Label prefHeight="25.0" prefWidth="262.0" text=" b ( )" />
<Label prefHeight="25.0" prefWidth="188.0" text="" />
<Label prefHeight="25.0" prefWidth="186.0" text=" E" />
<Label prefHeight="25.0" prefWidth="188.0" text=" " />
</children>
</VBox>
<VBox layoutX="312.0" layoutY="311.0" prefHeight="200.0" prefWidth="280.0">
<children>
<TextField fx:id="myTextField5" prefHeight="25.0" prefWidth="280.0" promptText=" ()" />
<TextField fx:id="myTextField7" prefHeight="25.0" prefWidth="280.0" promptText=" " />
</children>
</VBox>
<VBox layoutX="20.0" layoutY="310.0" prefHeight="200.0" prefWidth="262.0">
<children>
<Label prefHeight="25.0" prefWidth="260.0" text=" " />
<Label prefHeight="25.0" prefWidth="187.0" text=" " />
</children>
</VBox>
</children>
</Pane>
Création de la méthode principale de la classe Main
Classe principale
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
// sample.fxml( ).
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle(" ");
primaryStage.setScene(new Scene(root));
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
Création de la classe Controller, les plus importants sont signalés par des commentaires
Classe de contrôleur
ackage sample;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import java.net.URL;
import java.util.ResourceBundle;
import static java.lang.Double.NaN;
import static java.lang.Double.parseDouble;
import static java.lang.String.valueOf;
public class Controller extends TextField implements Initializable {
//
@FXML
private TextField myTextField4;
@FXML
private TextField myTextField1;
@FXML
private TextField myTextField2;
@FXML
private TextField myTextField3;
@FXML
private TextField myTextField5;
@FXML
private TextField myTextField6;
@FXML
private TextField myTextField7;
@FXML
private CheckBox checkbox1;
@FXML
private CheckBox checkbox2;
@FXML
private CheckBox checkbox3;
@FXML
private CheckBox checkbox4;
private double k;
private double krit;
private double zapas;
@Override
public void initialize(URL location, ResourceBundle resources) {
//
myTextField1.setTextFormatter(new AlphaNumericTextFormatter());
myTextField2.setTextFormatter(new AlphaNumericTextFormatter());
myTextField3.setTextFormatter(new AlphaNumericTextFormatter());
myTextField4.setTextFormatter(new AlphaNumericTextFormatter());
//myTextField6.setTextFormatter(new AlphaNumericTextFormatter());
}
public void showDateTime() throws Exception {
//
Double a = parseDouble(myTextField1.getText());
Double b = parseDouble(myTextField2.getText());
Double t = parseDouble(myTextField3.getText());
Double e = parseDouble(myTextField4.getText());
Double c = b / a;
// CheckBox
if (checkbox1.isSelected()) {
if (c <= 0.1) {
k = 8;
} else if ((c > 0.1) && (c <= 0.15)) {
k = 8.5;
} else if ((c > 0.15) && (c <= 0.2)) {
k = 8.8;
} else if ((c > 0.2) && (c <= 0.25)) {
k = 9;
} else if ((c > 0.25) && (c <= 0.30)) {
k = 9.2;
} else if ((c > 0.3) && (c <= 0.35)) {
k = 9.5;
} else if ((c > 0.35) && (c <= 0.40)) {
k = 9.8;
} else if ((c > 0.40) && (c <= 0.45)) {
k = 10.3;
} else if ((c > 0.45) && (c <= 0.50)) {
k = 10.5;
} else if ((c > 0.5) && (c <= 0.55)) {
k = 10.8;
} else if ((c > 0.55) && (c <= 0.6)) {
k = 11;
} else if ((c > 0.6) && (c <= 0.65)) {
k = 11.5;
} else if ((c > 0.65) && (c <= 0.7)) {
k = 11.8;
} else if ((c > 0.7) && (c <= 0.75)) {
k = 12;
} else if ((c > 0.75) && (c <= 0.8)) {
k = 12.5;
} else if ((c > 0.8) && (c <= 0.85)) {
k = 12.8;
} else if ((c > 0.85) && (c <= 0.9)) {
k = 13;
} else if ((c > 0.9) && (c <= 0.95)) {
k = 13.5;
} else if ((c > 0.95) && (c <= 1)) {
k = 14;
}
krit = (k * e) / (Math.pow((b / t), 2));
String d = valueOf(krit);
//
myTextField5.setText(d);
}
else if (checkbox2.isSelected()) {
if (c <= 0.1) {
k = 8;
} else if ((c > 0.1) && (c <= 0.15)) {
k = 8.2;
} else if ((c > 0.15) && (c <= 0.2)) {
k = 8.4;
} else if ((c > 0.2) && (c <= 0.25)) {
k = 8.5;
} else if ((c > 0.25) && (c <= 0.30)) {
k = 8.6;
} else if ((c > 0.3) && (c <= 0.35)) {
k = 8.7;
} else if ((c > 0.35) && (c <= 0.40)) {
k = 8.9;
} else if ((c > 0.40) && (c <= 0.45)) {
k = 9;
} else if ((c > 0.45) && (c <= 0.50)) {
k = 9.2;
} else if ((c > 0.5) && (c <= 0.55)) {
k = 9.4;
} else if ((c > 0.55) && (c <= 0.6)) {
k = 9.5;
} else if ((c > 0.6) && (c <= 0.65)) {
k = 9.7;
} else if ((c > 0.65) && (c <= 0.7)) {
k = 10;
} else if ((c > 0.7) && (c <= 0.75)) {
k = 10;
} else if ((c > 0.75) && (c <= 0.8)) {
k = 10.2;
} else if ((c > 0.8) && (c <= 0.85)) {
k = 10.5;
} else if ((c > 0.85) && (c <= 0.9)) {
k = 10.6;
} else if ((c > 0.9) && (c <= 0.95)) {
k = 11;
} else if ((c > 0.95) && (c <= 1)) {
k = 11;
}
krit = (k * e) / (Math.pow((b / t), 2));
String d = valueOf(krit);
myTextField5.setText(d);
}
else if (checkbox3.isSelected()) {
if (c <= 0.1) {
k = 4.9;
} else if ((c > 0.1) && (c <= 0.15)) {
k = 5.1;
} else if ((c > 0.15) && (c <= 0.2)) {
k = 5.2;
} else if ((c > 0.2) && (c <= 0.25)) {
k = 5.5;
} else if ((c > 0.25) && (c <= 0.30)) {
k = 5.8;
} else if ((c > 0.3) && (c <= 0.35)) {
k = 6;
} else if ((c > 0.35) && (c <= 0.40)) {
k = 6.2;
} else if ((c > 0.40) && (c <= 0.45)) {
k = 6.5;
} else if ((c > 0.45) && (c <= 0.50)) {
k = 6.9;
} else if ((c > 0.5) && (c <= 0.55)) {
k = 7;
} else if ((c > 0.55) && (c <= 0.6)) {
k = 7.5;
} else if ((c > 0.6) && (c <= 0.65)) {
k = 8;
} else if ((c > 0.65) && (c <= 0.7)) {
k = 8.2;
} else if ((c > 0.7) && (c <= 0.75)) {
k = 8.5;
} else if ((c > 0.75) && (c <= 0.8)) {
k = 9.1;
} else if ((c > 0.8) && (c <= 0.85)) {
k = 9.5;
} else if ((c > 0.85) && (c <= 0.9)) {
k = 10;
} else if ((c > 0.9) && (c <= 0.95)) {
k = 10.5;
} else if ((c > 0.95) && (c <= 1)) {
k = 11;
}
krit = (k * e) / (Math.pow((b / t), 2));
String d = valueOf(krit);
myTextField5.setText(d);
}
else if (checkbox4.isSelected()) {
if (c <= 0.1) {
k = 4.8;
} else if ((c > 0.1) && (c <= 0.15)) {
k = 5;
} else if ((c > 0.15) && (c <= 0.2)) {
k = 5;
} else if ((c > 0.2) && (c <= 0.25)) {
k = 5.1;
} else if ((c > 0.25) && (c <= 0.30)) {
k = 5.2;
} else if ((c > 0.3) && (c <= 0.35)) {
k = 5.4;
} else if ((c > 0.35) && (c <= 0.40)) {
k = 5.5;
} else if ((c > 0.40) && (c <= 0.45)) {
k = 5.6;
} else if ((c > 0.45) && (c <= 0.50)) {
k = 5.9;
} else if ((c > 0.5) && (c <= 0.55)) {
k = 6;
} else if ((c > 0.55) && (c <= 0.6)) {
k = 6.2;
} else if ((c > 0.6) && (c <= 0.65)) {
k = 6.5;
} else if ((c > 0.65) && (c <= 0.7)) {
k = 6.7;
} else if ((c > 0.7) && (c <= 0.75)) {
k = 7;
} else if ((c > 0.75) && (c <= 0.8)) {
k = 7.1;
} else if ((c > 0.8) && (c <= 0.85)) {
k = 7.4;
} else if ((c > 0.85) && (c <= 0.9)) {
k = 7.8;
} else if ((c > 0.9) && (c <= 0.95)) {
k = 8;
} else if ((c > 0.95) && (c <= 1)) {
k = 8.3;
}
krit = (k * e) / (Math.pow((b / t), 2));
String d = valueOf(krit);
myTextField5.setText(d);
}
Double f = parseDouble(myTextField6.getText());
zapas = krit/f;
String g = valueOf(zapas);
myTextField7.setText(g);
}
}
Création de deux classes pour appliquer le filtre d'entrée de données (hors lettres, ainsi que possibilité de limiter le nombre d'entrées / sorties). La solution n'est pas la mienne, mais je l'ai trouvée sur stackoverflow, de toutes celles proposées, elle m'a semblé la plus simple et la plus compréhensible.
AlphaNumericTextFormatter, classe
AlphaNumericTextFormatter, classe
public class AlphaNumericTextFormatter extends TextFormatter<String> {
/** The Constant ALPHA_NUMERIC_ONLY. */
//private static final String ALPHA_NUMERIC_ONLY = "^[a-zA-Z0-9]*$";
/** MAKE NUMERIC ONLY **/
private static final String DIGITS_ONLY = "^[0-9.]*$";
/**
* Instantiates a new alpha numeric text formatter.
*/
public AlphaNumericTextFormatter() {
super(applyFilter(null));
}
/**
* Instantiates a new alpha numeric text formatter.
*
* @param maxLength
* the max length
*/
public AlphaNumericTextFormatter(int maxLength) {
super(applyFilter(new MaxLengthTextFormatter(maxLength).getFilter()));
}
/**
* Apply filter.
*
* @param filter
* the filter
* @return the unary operator
*/
private static UnaryOperator<Change> applyFilter(UnaryOperator<Change> filter) {
return change -> {
if (change.getControlNewText() != null && change.getControlNewText().matches(DIGITS_ONLY)) {
if (filter != null) {
filter.apply(change);
}
return change;
}
return null;
};
}
}
Classe MaxLengthTextFormatter
Liste des codes
package sample;
import java.util.function.UnaryOperator;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;
public class MaxLengthTextFormatter extends TextFormatter<String> {
private int maxLength;
public MaxLengthTextFormatter(final int maxLength) {
super(new UnaryOperator<Change>() {
public Change apply(Change change) {
if (change.isDeleted()) {
if (change.getControlNewText().length() > maxLength) {
change.setText(change.getText().substring(0, maxLength));
}
} else if (change.getControlText().length() + change.getText().length() >= maxLength) {
int maxPos = maxLength - change.getControlText().length();
change.setText(change.getText().substring(0, maxPos));
}
return change;
}
});
this.maxLength = maxLength;
}
public int getMaxLength() {
return this.maxLength;
}
}
Eh bien, à la fin de la création du fichier jar
C'est tout. Maintenant, le fichier est prêt et fonctionnera sur n'importe quel ordinateur avec Java installé.