我最近完成了一个 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 上下文中的文本区域中?
进一步说明:
我的终端窗口如下所示:
我的 GUI 看起来像这样:
我希望我的终端位于最后一行的中间框中。
感谢您的任何建议/提示!
最佳答案
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/