表單驗證消息
回答
只是爲了給您一個啓程,這裏是一個小例子,使用ContextMenu。可能是ContextMenu
對於這種情況不是理想的控制,你可以用Label,Text等自由替換它。保持TextField
和Label
位於HBox(最初隱藏標籤)和HBox到GridPane
之內。或者,您可以一起使用任何其他方法!
您可以使用CSS設計驗證消息/控件!
我想補充(可能是你意識到這一點):
功能,這取決於你,當你要觸發驗證和應您的驗證條件是什麼 。在我的示例中,我正在檢查空的Textfields,並且我已觸發驗證點擊的登錄按鈕。您可以觸發驗證,在類似的情況下或刪除焦點從任何TextField或其他情況!
有很多方法可以幫助您尋找什麼,並且javafx在UI控件和設計上如此豐富,完全取決於您的創造力!
ValidationDemo.java
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class ValidationDemo extends Application {
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("Validation Demo");
BorderPane borderPane = new BorderPane();
borderPane.setCenter(loadLoginScreen());
Scene scene = new Scene(borderPane, 700, 500);
scene.getStylesheets().add(
ValidationDemo.class.getResource("context.css")
.toExternalForm());
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
private GridPane loadLoginScreen() {
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25, 25, 25, 25));
Text scenetitle = new Text("Welcome");
scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
grid.add(scenetitle, 0, 0, 2, 1);
Label userName = new Label("User Name:");
grid.add(userName, 0, 1);
final TextField userTextField = new TextField();
grid.add(userTextField, 1, 1);
Label pw = new Label("Password:");
grid.add(pw, 0, 2);
final PasswordField pwBox = new PasswordField();
grid.add(pwBox, 1, 2);
Button btn = new Button("Sign in");
HBox hbBtn = new HBox(10);
hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
hbBtn.getChildren().add(btn);
grid.add(hbBtn, 1, 4);
final Text actiontarget = new Text();
grid.add(actiontarget, 1, 6);
// Context Menu for error messages
final ContextMenu usernameValidator = new ContextMenu();
usernameValidator.setAutoHide(false);
final ContextMenu passValidator = new ContextMenu();
passValidator.setAutoHide(false);
// Action on button press
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
// Clearing message if any
actiontarget.setText("");
// Checking if the userTextField is empty
if (userTextField.getText().equals("")) {
usernameValidator.getItems().clear();
usernameValidator.getItems().add(
new MenuItem("Please enter username"));
usernameValidator.show(userTextField, Side.RIGHT, 10, 0);
}
// Checking if the pwBox is empty
if (pwBox.getText().equals("")) {
passValidator.getItems().clear();
passValidator.getItems().add(
new MenuItem("Please enter Password"));
passValidator.show(pwBox, Side.RIGHT, 10, 0);
}
// If both of the above textFields have values
if (!pwBox.getText().equals("")
&& !userTextField.getText().equals("")) {
actiontarget.setFill(Color.GREEN);
actiontarget.setText("Welcome");
}
}
});
userTextField.focusedProperty().addListener(
new ChangeListener<Boolean>() {
@Override
public void changed(
ObservableValue<? extends Boolean> arg0,
Boolean oldPropertyValue, Boolean newPropertyValue) {
if (newPropertyValue) {
// Clearing message if any
actiontarget.setText("");
// Hiding the error message
usernameValidator.hide();
}
}
});
pwBox.focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> arg0,
Boolean oldPropertyValue, Boolean newPropertyValue) {
if (newPropertyValue) {
// Clearing message if any
actiontarget.setText("");
// Hiding the error message
passValidator.hide();
}
}
});
return grid;
}
}
context.css
.root {
-fx-background-color: cornsilk;
-fx-padding: 10;
}
.context-menu {
-fx-background-color: #006699;
-fx-text-fill: white;
-fx-padding: 0;
}
.context-menu:hover {
-fx-background-color: #006699;
-fx-text-fill: white;
}
.menu-item .label {
-fx-text-fill: white;
}
.menu-item:focused .label {
-fx-text-fill: white;
}
我在這裏發現了一個問題。當我點擊按鈕而不輸入任何文本時,我會看到驗證消息。在此期間,當我打開另一個軟件時,我會看到Firefox上的驗證消息。隱藏JavaFX應用程序時如何隱藏消息? – user1285928
我無法在我的mac上覆制javafx 2.2(jdk 1.7.0_51)上的問題 – ItachiUchiha
我正在使用最新的Java 8.也許這是Java 8中的一個錯誤? – user1285928
- 1. 播放框架表單驗證消息
- 2. Angular2表單驗證錯誤消息
- 3. Thymeleaf - 表單驗證和錯誤消息
- 4. Angular4自動錶單驗證消息
- 5. 帶驗證消息的表單設計
- 6. Firefox:HTML5表單驗證沒有消息?
- 7. 錯誤消息角表單驗證
- 8. PlayFramework 2.1:驗證表單(錯誤消息)
- 9. 用戶名錶單驗證消息
- 10. JavaScript:.innerhtml錯誤消息表單驗證
- 11. php表單驗證和錯誤消息
- 12. angular2表單驗證錯誤消息
- 13. Angular autovalidate表單驗證消息?
- 14. Ajax表單驗證消息不顯示
- 15. CakePHP未顯示錶單驗證消息
- 16. 翻譯表單驗證消息
- 17. 驗證表單錯誤消息的JavaScript
- 18. jQuery,表單驗證,驗證每個字段後的消息
- 19. 在codeigniter中驗證表單驗證消息?
- 20. 驗證消息
- 21. 驗證消息
- 22. 單個警報消息中的多個表單驗證錯誤消息javascript
- 23. Html.EditorFor驗證消息
- 24. jquery驗證消息
- 25. JSF驗證消息
- 26. 與驗證消息
- 27. HTML5驗證消息?
- 28. rails驗證消息
- 29. 單選按鈕驗證錯誤消息
- 30. PHP驗證錯誤消息訂單
的可能重複的[JavaFX的 - 字段驗證](http://stackoverflow.com/questions/18825436/ javafx-field-validation) – Perneel
您可以使用Javafx標準組件製作這樣的自定義組件。我不知道有任何這樣的自定義組件可用,但您可以根據需要製作一個! – ItachiUchiha
對於第二個選項(對於該字段的彈出窗口),請參閱:[ControlsFX PopOver](http://fxexperience.com/controlsfx/features/#popover) – Jurgen