如何将控制台的输出放到java中的swing Gui
我是java新手,正在尝试以下示例。使用下面的代码,我可以打印XML文件的所有节点。现在我想使用Swing并将其放在一个简单的Swing窗口中
我知道如何创建窗口,但如何将控制台输出连接到JTextArea
?我在堆栈溢出上搜索它,但没有得到正确的想法
public static void main(String[] args) throws IOException
{
try
{
File file = new File("dum.xml");
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = documentBuilder.parse(file);
System.out.println("Root element: "+ document.getDocumentElement().getNodeName());
if (document.hasChildNodes())
{
printNodeList(document.getChildNodes());
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
private static void printNodeList(NodeList nodeList)
{
for (int count = 0; count < nodeList.getLength(); count++)
{
Node elemNode = nodeList.item(count);
if (elemNode.getNodeType() == Node.ELEMENT_NODE)
{
// get node name and value
System.out.println("\nZeilenname =" + elemNode.getNodeName()+ " [Anfang]");
System.out.println("Zeileninhalt =" + elemNode.getTextContent());
if (elemNode.hasAttributes())
{
NamedNodeMap nodeMap = elemNode.getAttributes();
for (int i = 0; i < nodeMap.getLength(); i++)
{
Node node = nodeMap.item(i);
System.out.println("Attributname : " + node.getNodeName());
System.out.println("Attributwert : " + node.getNodeValue());
}
}
if (elemNode.hasChildNodes())
{
//recursive call if the node has child nodes
printNodeList(elemNode.getChildNodes());
}
System.out.println("Zeilenname =" + elemNode.getNodeName()+ " [Ende]");
}
}
}
# 1 楼答案
创建一个
JTextArea
。将对System.out.println
的所有调用替换为JTextArea.append
。下面的代码演示请参阅Creating a GUI With Swing
# 2 楼答案
这是如何按照最佳实践(即使用
SwingUtilities#invokeLater(...)
运行Swing应用程序)为Java Swing应用程序创建主框架的方法现在需要添加组件以显示文本
JLabel
、JTextField
和JTextArea
是主要候选。既然您提到了文本区域,让我们使用该组件。为此,您只需在末尾添加以下两行:然后可以修改此示例代码,使其看起来更好。例如,您可以将文本区域放在
JPanel
中,然后可以使用布局控制面板的位置和大小,以防止文本区域扩展到整个JFrame
的大小。但这段极简主义代码正是您想要的,即在JavaSwingGUI中设置文本更新:您可以使用
append()
方法向GUI添加行。例如: