我正在做一个界面来显示我的模拟进度(电梯模拟建筑物上的工作)。 问题是,我已经在SystemOutPrintlns的控制台上做了这个,我想在javaFX窗口上显示完全相同的东西,无论如何我可以设置TextAre的文本或标签或东西来匹配控制台的输出?只打印相同的东西,而不是在控制台上打印我想在窗口上打印。 我愚蠢到试图将textArea的Text设置为我的模拟器的toString但是如果它是System Out Prinln则显示在控制台而不是文本区域。
编辑:这就是我要打印的内容
@覆盖 public String toString() {
for (int y = 0; y < 50; y++)
{
System.out.println("");
}
for (int i = pisos.size() - 1; i >= 0; i--)
{
System.out.print(pisos.get(i).getPiso() );
System.out.print(pisos.get(i).pQueue().toString());
System.out.print(" " + percorrerElevadores2(i));
System.out.print(" " + pisos.get(i).pessoasServidas() + "\n");
}
System.out.println("Numero total de passageiros à espera:" + " " + Predio.getPredio().getNPessoasEmEspera());
System.out.println("Numero total de pessageiros servidos:" + " " + Predio.getPredio().getNPessoasServidas());
for (int z = 0; z < getElevadores().size(); z++)
{
System.out.println("Distancia percorrida pelo elevador" + " " + z + ":" + " " + Predio.getPredio().getElevadores().get(z).getDistanciaPercorrida() + " " + "Pisos");
System.out.println("Piso destino do elevador" + " " + z + ":" + " " + Predio.getPredio().getElevadores().get(z).getPisoDestino());
}
return "";
}
}
答案 0 :(得分:0)
最好使用MessageDialogBox在窗口上打印消息,并参考您正在使用的面板。
答案 1 :(得分:0)
我真的不明白你的问题,但重命名println调用比重定向它更容易。在你的主类(扩展Application的那个)或者任何类中使用这样的代码,但你需要将textArea添加到场景图中。
private static final TextArea textArea = new TextArea();
//add textArea to your scene somewhere in the start method
public static void println(String s){
Platform.runLater(new Runnable() {//in case you call from other thread
@Override
public void run() {
textArea.setText(textArea.getText()+s+"\n");
System.out.println(s);//for echo if you want
}
});
}
然后只需使用IDE的搜索和替换将System.out.println重命名为MainClassName.println。
答案 2 :(得分:0)
据我所知,您只想在某个位置打印文本以调查事物,即结果。您想要的一切就像您在控制台上打印文本一样,您还希望在JavaFX应用程序中的某处打印此文本。尽管在其toString方法中进行了格式化,但您可以捕获方法的返回并打印到JavaFX应用程序(例如,在控制节点内),对吗?
如果是这种情况......
我创建了一个适用于两个文本区域的简单应用程序。在应用程序的中间,您将找到操纵这两个区域的按钮。基本上,按钮将文本区域的内容发送到另一个。注意:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class AreaTextual extends Application
{
// #########################################################################################################
// MAIN
// #########################################################################################################
public static void main(String[] args)
{
Application.launch(args);
}
// #########################################################################################################
// INSTÂNCIAS
// #########################################################################################################
// Controles.
private Label lab_receptor;
private Label lab_emissor;
private TextArea tArea_receptor;
private TextArea tArea_emissor;
private Button bot_enviar;
private Button bot_enviarLinha;
private Button bot_substituir;
private Button bot_apagar;
// Layout.
private HBox hbox_raiz;
private VBox vbox_oeste;
private VBox vbox_centro;
private VBox vbox_leste;
// #########################################################################################################
// INÍCIO FX
// #########################################################################################################
@Override public void start(Stage estagio) throws Exception
{
this.iniFX();
this.confFX();
this.adFX();
this.evFX();
Scene cenario = new Scene(this.hbox_raiz , 640 , 480);
estagio.setScene(cenario);
estagio.setTitle("Programa JavaFX");
estagio.show();
}
/** Inicia nós FX.*/
protected void iniFX()
{
// Controles.
this.lab_receptor = new Label();
this.lab_emissor = new Label();
this.tArea_receptor = new TextArea();
this.tArea_emissor = new TextArea();
this.bot_enviar = new Button();
this.bot_enviarLinha = new Button();
this.bot_substituir = new Button();
this.bot_apagar = new Button();
// Layout.
this.hbox_raiz = new HBox();
this.vbox_oeste = new VBox();
this.vbox_centro = new VBox();
this.vbox_leste = new VBox();
}
/** Configura nós FX.*/
protected void confFX()
{
// Controles.
this.lab_receptor.setText("RECEPTOR");
this.lab_receptor.setFont(new Font(32));
this.lab_emissor.setText("EMISSOR");
this.lab_emissor.setFont(new Font(32));
this.bot_enviar.setText("<- ENVIAR");
this.bot_enviar.setPrefSize(150 , 60);
this.bot_enviarLinha.setText("<- ENVIAR+");
this.bot_enviarLinha.setPrefSize(150 , 60);
this.bot_substituir.setText("<- SUBSTITUIR");
this.bot_substituir.setPrefSize(150 , 60);
this.bot_apagar.setText("<- APAGAR TUDO ->");
this.bot_apagar.setPrefSize(150 , 60);
// Layout.
this.hbox_raiz.setSpacing(20);
this.hbox_raiz.setPadding(new Insets(30 , 30 , 30 , 30));
this.hbox_raiz.setAlignment(Pos.CENTER);
this.vbox_oeste.setSpacing(10);
this.vbox_oeste.setAlignment(Pos.CENTER);
this.vbox_centro.setSpacing(10);
this.vbox_centro.setAlignment(Pos.CENTER);
this.vbox_centro.setPrefSize(400 , 200);
this.vbox_leste.setSpacing(10);
this.vbox_leste.setAlignment(Pos.CENTER);
}
/** Adiciona e organiza em layout os nós FX.*/
protected void adFX()
{
this.vbox_leste.getChildren().addAll(this.lab_emissor , this.tArea_emissor);
this.vbox_centro.getChildren().addAll(this.bot_enviar , this.bot_enviarLinha , this.bot_substituir , this.bot_apagar);
this.vbox_oeste.getChildren().addAll(this.lab_receptor , this.tArea_receptor);
this.hbox_raiz.getChildren().addAll(this.vbox_oeste , this.vbox_centro , this.vbox_leste);
}
/** Configura eventos de nós FX.*/
protected void evFX()
{
this.bot_enviar.setOnAction(new EventHandler<ActionEvent>()
{
@Override public void handle(ActionEvent e)
{
tArea_receptor.appendText(tArea_emissor.getText());
}
});
this.bot_enviarLinha.setOnAction(new EventHandler<ActionEvent>()
{
@Override public void handle(ActionEvent e)
{
tArea_receptor.appendText(String.format("%n%s" , tArea_emissor.getText()));
}
});
this.bot_substituir.setOnAction(new EventHandler<ActionEvent>()
{
@Override public void handle(ActionEvent e)
{
tArea_receptor.replaceText(0 , tArea_receptor.getLength() , tArea_emissor.getText());
}
});
this.bot_apagar.setOnAction(new EventHandler<ActionEvent>()
{
@Override public void handle(ActionEvent e)
{
tArea_receptor.setText("");
tArea_emissor.setText("");
}
});
}
}
OBS ( PT-BR ):Eu noteiquevocêfalaportuguês,portanto deixeiocódigainlinguagem paraquevocêentenda-o melhor。
这门课没什么特别的。它只是向您展示如何操作TextArea的文本。您可以找到TextArea的其他类型的处理程序here以及here。
关于从另一个线程调用JavaFX方法的问题,这可能只是因为您没有使用JavaFX应用程序线程而发生。就像Swing库中有Event Dispatch Thread(EDT)一样,JavaFX也有自己的线程负责处理JavaFX元素。每当您需要操作任何JavaFX元素时,无论是设置某些东西还是获取某些数据,都需要使用JavaFX Application Thread而不是另一个来完成。
要调用JavaFX应用程序线程的方法,请使用Platform runLater方法。有关JavaFX线程系统的更多信息,请访问以下链接:
http://docs.oracle.com/javafx/2/architecture/jfxpub-architecture.htm
http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm
在第一个链接中,阅读谈论线程的部分。如果您还有其他问题,请回到这里询问。
祝你好运。