java - 如何获取终端结果并设置 JTextArea 来读取终端?

标签 java swing user-interface jtextarea

我最近完成了一个 GUI,用户可以在其中输入条件,并获得符合所述条件的结果。该程序的工作结果明智,但我无法让我的 GUI 中的文本字段读取我的终端窗口结果。我的 GUI 代码如下:

package project205;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class HouseListGUI extends JFrame
{
//GUI Components

HouseList availableHouses = new HouseList("src/houses.txt");

 JLabel  cLab   = new JLabel("Criteria");
 JLabel  minLab   = new JLabel("Min");
 JLabel  maxLab   = new JLabel("Max");
 JLabel  pLab   = new JLabel("Price");
 JLabel  aLab   = new JLabel("Area");
 JLabel  bLab   = new JLabel("Bedrooms");

 JTextField  pMin   = new JTextField(10);
 JTextField  pMax   = new JTextField(10);
 JTextField  aMin   = new JTextField(10);
 JTextField  aMax   = new JTextField(10);
 JTextField  bMin   = new JTextField(10);
 JTextField  bMax   = new JTextField(10);

 JTextArea  results    = new JTextArea(20, 40);

 JButton sButton   = new JButton("Search");
 JButton qButton   = new JButton("Quit");

public HouseListGUI()
{


        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400,300);
        setVisible(true);  





Container c = getContentPane();
c.setLayout(new GridLayout(5,3,10,10));
c.add(cLab);
c.add(minLab);
c.add(maxLab);
c.add(pLab);
c.add(pMin);
c.add(pMax);
c.add(aLab);
c.add(aMin);
c.add(aMax);
c.add(bLab);
c.add(bMin);
c.add(bMax);
c.add(sButton);
c.add(results);
c.add(qButton);

sButton.addActionListener(
  new ActionListener()
  {
    public void actionPerformed(ActionEvent e)
    {
    String pmn = pMin.getText();
    String pmx = pMax.getText();
    String amn = aMin.getText();
    String amx = aMax.getText();
    String bmn = bMin.getText();
    String bmx = bMax.getText();

    int pmn1 = Integer.parseInt(pmn);
    int pmx1 = Integer.parseInt(pmx);
    int amn1 = Integer.parseInt(amn);
    int amx1 = Integer.parseInt(amx);
    int bmn1 = Integer.parseInt(bmn);
    int bmx1 = Integer.parseInt(bmx);


    Criteria theCriteria = new Criteria(pmn1, pmx1, amn1, amx1, bmn1, bmx1);

    availableHouses.printHouses(theCriteria);

    results.setText("");

    }
  });


qButton.addActionListener(
        new ActionListener()
        {
             public void actionPerformed(ActionEvent e)
             {
                 System.exit(0);
             }
        }
        );
}
public static void main(String[] args)
{

    //HouseList availableHouses = new HouseList("src/houses.txt");
    HouseListGUI g1 = new HouseListGUI();
    g1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    g1.setSize(1000,500);
    g1.show();
}

}

我想要代码行的结果 availableHouses.printHouses(theCriteria); 它返回一个 void 类型 打印在textArea中 结果

我尝试使用类型转换将 void 转换为字符串并将其放入结果中,即:

   results.setText((String)availableHouses.printHouses(theCriteria);

但是 Java 没有这样的功能。

TL;博士:

如何获取由 void 类型的方法调用产生的终端,并将其作为 String 类型打印到 GUI 上下文中的文本区域中?

进一步说明:

我的终端窗口如下所示:

/image/ZTZFC.jpg

我的 GUI 看起来像这样:

/image/dCxbZ.jpg

我希望我的终端位于最后一行的中间框中。

感谢您的任何建议/提示!

最佳答案

I've tried using type cast to cast the void as a string and putting that into results, ie:

results.setText((String)availableHouses.printHouses(theCriteria);

不,这永远行不通,而且你正在倒退。最好让 HouseList 的 printHouses(...) 方法返回一个字符串,然后可以轻松地在 JTextArea 中显示该字符串,只需很少或无需修改,当然也不会出现错误的转换。

否则,如果您绝对必须从另一个无法以任何方式更改的控制台程序获取标准输出,则必须在单独的进程中调用它(如果是 Java 程序,则在单独的 JVM 中调用它)使用 ProcessBuilder 作为进程运行),然后从进程中捕获 InputStream,并将其输出到 JTextArea 中。它是可行的,但需要使用后台线程和异常捕获,而且我不建议初学者深入研究。

关于java - 如何获取终端结果并设置 JTextArea 来读取终端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26270382/

相关文章:

javascript - 使用多个超链接作为提交和输入

java - 缺少 Java Play 项目所需的 activator-dist 目录

java - Maven 属性 ${project.artifact.selectedVersion.majorVersion}

java - 使用 JFrame 使用 Java 编写简单时钟

java - jFrame新线程

python - PyQT中事件的识别源

Python Tkinter 坐标函数不会在循环内移动 Canvas 对象

java - 使用空布局在 JTextpane 中插入 Jtable

java - Java中的 boolean 逻辑表达式

java - JTextField 要求我在进行正确更新之前再次给予它焦点