2017-11-13 26 views
-1

JavaFXを使用して、ユーザーが情報を入力できる4つのテキストフィールドを作成しました。次に、ボタンを押すと、ユーザーが保存する場所を選択できるテキストファイルにユーザーの入力を保存します。 個々のフィールドのそれぞれからユーザーの入力を取得する方法がわかりません。 ここにあるコントローラクラスでfxmlを使用しています。私は、テキストの入力を書いて、ユーザの希望ごとにそれを保存することができたJavaFXで複数のテキストフィールドから入力を取得

:ここ

package application; 

import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.lang.System.Logger; 
import java.lang.System.Logger.Level; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.scene.Group; 
import javafx.scene.control.Button; 
import javafx.scene.control.ListView; 
import javafx.scene.control.TextArea; 
import javafx.scene.control.TextField; 
import javafx.stage.FileChooser; 
import javafx.stage.Stage; 

public class MainController { 

@FXML 
private Button Button1; 
@FXML 
private Button Button2; 

@FXML 
private ListView listview; 
@FXML 
private TextField Name; 
@FXML 
private TextField DoB; 
@FXML 
private TextField Address; 
@FXML 
private TextField Exp; 

public void Button1Action(ActionEvent event) { 
    FileChooser fc = new FileChooser(); 
    File selectedFile = fc.showOpenDialog(null); 

    if (selectedFile != null) { 
     listview.getItems().add(selectedFile.getName()); 
    } else { 
     System.out.println("File is not valid"); 
    } 

} 

public void Button2Action(ActionEvent e) { 
    String name = name.getText(Name); 
} 

} 

はFXML

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.control.ListView?> 
<?import javafx.scene.control.TextField?> 
<?import javafx.scene.layout.AnchorPane?> 

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" 
minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" 
xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" 
fx:controller="application.MainController"> 
<children> 
    <Button fx:id="Button1" layoutX="90.0" layoutY="72.0" 
mnemonicParsing="false" onAction="#Button1Action" text="File Explorer" /> 
    <ListView fx:id="listview" layoutX="300.0" layoutY="27.0" 
prefHeight="346.0" prefWidth="200.0" /> 
    <TextField fx:id="DoB" layoutX="131.0" layoutY="238.0" /> 
    <TextField fx:id="Address" layoutX="131.0" layoutY="274.0" /> 
    <TextField fx:id="Exp" layoutX="131.0" layoutY="310.0" /> 
    <TextField fx:id="Name" layoutX="131.0" layoutY="200.0" /> 
    <Button fx:id="Button2" layoutX="159.0" layoutY="348.0" 
mnemonicParsing="false" onAction="#Button2Action" text="Print Paycheck" /> 
    <Label layoutX="15.0" layoutY="204.0" text="Name" /> 
    <Label layoutX="14.0" layoutY="242.0" text="Date of Birth" /> 
    <Label layoutX="15.0" layoutY="278.0" text="Address" /> 
    <Label layoutX="15.0" layoutY="314.0" text="Years of Experience" /> 
</children> 
</AnchorPane> 

EDITです。 しかし、あなたがテキストフィールドの配列を作成することができ、新たなライン上のファイルイマイチ内のテキストと

FileChooser fileChooser = new FileChooser(); 
    fileChooser.setTitle("Save file"); 
    fileChooser.getExtensionFilters().add(new ExtensionFilter("Text Files", 
"*.txt")); 
    File saveFile = fileChooser.showSaveDialog(window); 

    FileWriter writer; 
    try { 
     writer = new FileWriter(saveFile); 
     BufferedWriter buf = new BufferedWriter(writer); 

     buf.write(name.getText() + "\n "); 
     buf.write(dob.getText() + "\n "); 
     buf.write(address.getText() + "\n "); 
     buf.write(exp.getText() + "\n "); 
     buf.flush(); 
     buf.close(); 

    } catch (IOException e) { 

    } 

答えて

-1

間隔をあけません。 ListViewではなくvboxを作成し、forループ内のvboxの子にテキストフィールドを追加します。

別のオプションはリストビューを使用しています。 [テキストフィールドが少ない場合、リストビューの代わりにvboxを使用する]

1

String name = name.getText(Name);String name = Name.getText()に変更する必要があります。それぞれのテキストフィールドに似たようなことをすれば、その内容を得ることができるはずです。

編集:
あなたはこのように使用することができますFileChooser、使用することができ、彼らは、テキストファイルとそれを呼び出すために保存したい場所をユーザーに促す:

FileChooser fileChooser = new FileChooser(); 
fileChooser.setTitle("Save File"); 
fileChooser.getExtensionFilters().add(new ExtensionFilter("Text Files", "*.txt")); 
Window window = Button1.getScene().getWindow(); 
File saveFile = fileChooser.showSaveDialog(window); 

してから使用をあなたがファイルにしたいものを書くための通常のファイルIOのもの。あなたが無視するのは自由です

コードレビューの追記は、:
小文字と大文字であなたのクラスで始まるあなたの変数に名前を付けるためにJavaで良い練習と考えられています。これは、メソッドがオブジェクトのインスタンス上で呼び出されているのか、クラス上で呼び出されているのかを一見して明らかにする。

+0

驚くばかりです。その作業を行い、結果をコンソールに出力して確実に動作させるようにします。 これをテキストファイルに保存し、場所 – Chris

+0

編集されたOPを選択するように促すようにしました。それは私が "\ n"を持っていても新しい行にそれぞれのフィールドを入れないことです。 – Chris

+0

の代わりに "\ n" BufferedWriterのドキュメントから 'buf.newLine()'を試してみてくださいhttps://docs.oracle.com/javase/8/docs/api/java/io/BufferedWriter.html#newLine- - – MMAdams

関連する問題