0

我在将数据从一个屏幕中的表填充到另一个屏幕中的文本字段时遇到问题。我有两个类 FirstClass 包含一个文本框和一个按钮。按下按钮会打开第二个窗口,其中包含一个值表。当用户双击一行时,该行的第二列的值应该插入到 FirstClass 的文本框中。附上这两个类的代码。感谢你在期待。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class FirstClass extends Application {
public static void main(String[] args) {
    launch(args);
}

@Override
public void start(final Stage primaryStage) {
    primaryStage.setTitle("First Class");

    GridPane gridpane = new GridPane();
    gridpane.setPadding(new Insets(5));
    gridpane.setHgap(5);
    gridpane.setVgap(5);

    final TextField userNameFld = new TextField();
    gridpane.add(userNameFld, 1, 1);
    Button btn = new Button();
    btn.setText("Show Table");
    gridpane.add(btn, 1, 3);

    btn.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            String a = TableClass.showDialog(primaryStage, true, "Table Window" );
            userNameFld.setText(a);
        }
    });

    StackPane root = new StackPane();

    Scene scene =new Scene(root, 300, 250);

    root.getChildren().addAll(gridpane);
    primaryStage.setScene(scene);
    primaryStage.show();
 }
}







import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Modality;
import javafx.stage.Stage;

public class TableClass extends Stage {

private static TableClass dialog;
private static String value = "";


public static class Person {
    private final SimpleStringProperty firstName;
    private final SimpleStringProperty lastName;


    private Person(String fName, String lName) {
        this.firstName = new SimpleStringProperty(fName);
        this.lastName = new SimpleStringProperty(lName);
    }

    public String getFirstName() {
        return firstName.get();
    }
    public void setFirstName(String fName) {
        firstName.set(fName);
    }

    public String getLastName() {
        return lastName.get();
    }
    public void setLastName(String fName) {
        lastName.set(fName);
    }
}


 private TableView<Person> table = new TableView<Person>();
    private final ObservableList<Person> data = 
        FXCollections.observableArrayList(
            new Person("JACK", "BROWN"),
            new Person("JOHN", "VIANNEYS"),
            new Person("MICHAEL", "NELSON"),
            new Person("WILLIAM", " CAREY")
        );


public TableClass(Stage owner, boolean modality, String title) {
    super();
    initOwner(owner);
    Modality m = modality ? Modality.APPLICATION_MODAL : Modality.NONE;
    initModality(m);
    setOpacity(1);
    setTitle(title);

    StackPane root = new StackPane();

    Scene scene = new Scene(root, 750, 750);

    setScene(scene);
    GridPane gridpane = new GridPane();
    gridpane.setPadding(new Insets(5));
    gridpane.setHgap(5);
    gridpane.setVgap(5);


    TableColumn firstNameCol = new TableColumn("First Name");
    firstNameCol.setMinWidth(100);
    firstNameCol.setCellValueFactory(
    new PropertyValueFactory<Person,String>("firstName")
    );

    TableColumn lastNameCol = new TableColumn("Last Name");
    lastNameCol.setMinWidth(200);
    lastNameCol.setCellValueFactory(
    new PropertyValueFactory<Person,String>("lastName")
    );



    table.setItems(data);
    table.getColumns().addAll(firstNameCol, lastNameCol);



    table.setOnMouseClicked(new EventHandler<MouseEvent>() {

           public void handle(MouseEvent me) {

                   if (me.getClickCount() >= 2) {
                       String  srr = table.getItems().get    (table.getSelectionModel().getSelectedIndex()).getLastName();
                       value = srr;
                       dialog.hide();
                      }
               }
        });


    gridpane.add(table, 1, 5,1,20 );
    root.getChildren().add(gridpane);
    }


public static String showDialog(Stage stg, Boolean a , String title){
      dialog = new TableClass( stg,a, title);
      dialog.show();
      return value;
  }
 }
4

1 回答 1

1

快速简便的方法(但它引入了 2 个类之间的耦合)将传递userNameFld给您的showDialog方法并使其成为 TableClass 的成员。然后,您可以从 TableClass 类中更改其值。

更好的方法是绑定userNameFldtovalue的值。

于 2012-05-24T09:35:49.247 回答