2017-06-28 21 views
2

私はjavafxの新しいプログラマーです。私は、ファジー計算機と呼ばれるデスクトップアプリケーションを構築しています。このプログラムを実行するたびにユーザーインターフェイスが開きますが、インターフェイスのボタン(Max-Min)をクリックすると、テキストフィールドの代わりにコンソールで出力が見つかりました。私が作成したテキストフィールドで希望の出力を得るにはどうすればいいですか?私はすでに解決策を探しているのに多くの時間を無駄にしていますが、彼らのどれもが私に働いているとはっきりしていません。javafxのコンソール出力&GUIテキストフィールド?

私はあなたの提案については、以下の私のコードを添付しています

..

N.B:私のアプリケーションは、すべてのボタンは、現在動作していない気分の開発にあるように、唯一のマックス分ボタンが有効になっています。

Main.java

import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class Main extends Application { 

@Override 
public void start(Stage primaryStage) throws Exception{ 
    Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); 
    primaryStage.setTitle("Fuzzy Calculator"); 
    primaryStage.setScene(new Scene(root, 600, 400)); 
    primaryStage.show(); 
} 


public static void main(String[] args) { 
    launch(args); 
} 
} 

Controller.java

package sample; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextField; 
import java.util.Arrays; 
import java.util.Scanner; 
public class Controller { 
@FXML 
private Button add; 

@FXML 
private Button maxmin; 

@FXML 
private Button maxavg; 

@FXML 
private Button sub; 

@FXML 
private TextField display; 

@FXML 
private Button maxprod; 

@FXML 
private Button minmax; 

@FXML 
void maxmin(ActionEvent event) { 

    System.out.println("Array size:"); 
    Scanner input=new Scanner(System.in); 
    int n=input.nextInt(); 
    System.out.println("1st input "); 
    int a[][]=new int [n][n]; 
    for(int i=0;i<n;i++) 
    { 
     for(int j=0;j<n;j++) 
     { 
      a[i][j]=input.nextInt(); 
     } 
    } 
    System.out.println("2nd input "); 
    int b[][]=new int [n][n]; 

    for(int i=0;i<n;i++) 
    { 
     for(int j=0;j<n;j++) 
     { 
      b[i][j]=input.nextInt(); 
     } 
    } 
    int [] c=new int [n]; 
    int [] k=new int [n]; 
    int t=0; 
    for(int i=0;i<n;i++) 
    { 
     t=0; 
     for(int j=0;j<n;j++) 
     { 

      if(a[i][j]<b[j][i]) 
      { 
       k[t]=a[i][j]; 
       t++; 
      } 
      else 
      { 
       k[t]=b[j][i]; 
       t++; 
      } 
     } 
     Arrays.sort(k); 
     c[i]=k[n-1]; 
    } 
    System.out.println("the output is :"); 
    for(int i=0;i<n;i++) 
    { 
     System.out.print(" "+c[i]); 
    } 

} 
} 

サンプル。FXML

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.text.*?> 
<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.geometry.Insets?> 
<?import javafx.scene.layout.GridPane?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller"> 
<children> 
    <SplitPane dividerPositions="0.5" layoutX="102.0" layoutY="51.0" orientation="VERTICAL" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="25.0"> 
    <items> 
     <AnchorPane maxHeight="100.0" prefHeight="80.0"> 
      <children> 
       <TextField fx:id="display" layoutX="150.0" layoutY="42.0" prefHeight="100.0" prefWidth="598.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
       <font> 
        <Font size="15.0" /> 
       </font> 
       </TextField> 
      </children> 
     </AnchorPane> 
     <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="230.0" prefWidth="598.0"> 
      <children> 
       <GridPane layoutY="6.0" prefHeight="267.0" prefWidth="598.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
       <columnConstraints> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
       </columnConstraints> 
       <rowConstraints> 
        <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
        <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
       </rowConstraints> 
       <children> 
        <Button fx:id="maxmin" alignment="CENTER" contentDisplay="CENTER" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#maxmin" prefHeight="134.0" prefWidth="199.0" text="Max-Min"> 
         <font> 
          <Font size="28.0" /> 
         </font> 
        </Button> 
        <Button fx:id="maxprod" alignment="CENTER" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" prefHeight="134.0" prefWidth="199.0" text="Max_Product" GridPane.columnIndex="1"> 
         <font> 
          <Font size="28.0" /> 
         </font> 
        </Button> 
        <Button fx:id="maxavg" alignment="CENTER" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" prefHeight="134.0" prefWidth="199.0" text="Max_Average" GridPane.columnIndex="2"> 
         <font> 
          <Font size="27.0" /> 
         </font> 
        </Button> 
        <Button fx:id="add" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" prefHeight="134.0" prefWidth="199.0" text="Addition" GridPane.rowIndex="1"> 
         <font> 
          <Font size="28.0" /> 
         </font> 
        </Button> 
        <Button fx:id="sub" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" prefHeight="134.0" prefWidth="199.0" text="Subtraction" GridPane.columnIndex="1" GridPane.rowIndex="1"> 
         <font> 
          <Font size="28.0" /> 
         </font> 
        </Button> 
        <Button fx:id="minmax" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" prefHeight="134.0" prefWidth="199.0" text="Min-Max" GridPane.columnIndex="2" GridPane.rowIndex="1"> 
         <font> 
          <Font name="System Bold" size="28.0" /> 
         </font> 
        </Button> 
       </children> 
       </GridPane> 
      </children> 
     </AnchorPane> 
    </items> 
    </SplitPane> 
    </children> 
</AnchorPane> 

答えて

1

すべてはあなたのコードで、通常のようで、これは標準出力

あるので、あなたはあなたがに印刷すると、コンソールに出力されます

System.out.println("the output is :"); 

を書いたものを行いますテキストフィールドに書いてください。

display.setText(display.getText()+"new text, with its value : + 65); 

setText()テキストが

getText()に表示されるかを決定することである既ににテキストを取り戻すためにあるだけsetText();を使用する場合はこのようなものがありますので、それが連結

を行うことができます:

display.setText("log n°1 ..."); 

ログN°1

display.setText("log n°2 ..."); 

ログN°2

そして、あなたはテキストを追加し、それを交換しないようにしたい:

display.setText("log n°1 ...\n"); 

ログのn°1

display.setText(display.getText() + "log n°2 ..."); 

ログN°1

ログN°2


しかし、これは別のスレッドからUIを更新しています。 UIは、UIスレッドからのみ更新できます。これを実現するために、あなたはそれがタスクを実行するためにUIスレッドを伝え

Platform.runLater(() -> { 
     display.setText(display.getText() + "log n°2 ..."); 
}); 

次のようにやってきました;)

+1

私はあなたのアプローチを試してみましたが、今回は全体のインターフェースがフリーズになります。コンソールとテキストフィールドの両方が空白です。私はどこにでも出力を得ていません。私は何をすべきか? ありがとう.. –

+1

これは「正常」です。あなたはループを計算するスレッドで多くのデータを送信していますが、これはインターフェイスを担当しています。 – azro

+0

どうすればよいでしょうか、どうすれば解決できますか? –

関連する問題