我目前正在尝试将基于控制台的Java应用程序(也由我制作)转换为使用基于Swing的GUI的控制台。一切都很好,但我不理解Swing以及我想要的,所以这有点困难。
我目前的问题是在输出中打印一组字符。最初,我能够通过明智地使用for循环和System.out.print(theworld [j] [i])直接打印到控制台; (其中i和j遍历循环,而theworld是有问题的数组),但我不知道如何获得类似于Swing GUI的工作。
具体来说,它像这样打印到控制台:
for (int i = 0; i < ydimension; i++){
for (int j = 0; j < xdimension; j++){
System.out.print(theworld [j][i]);
}
System.out.println();
}
目前,我有一个附有JMenuBar的JFrame,它都按预期工作。我想要的是阵列出现在框架(或连接的面板)上,以响应刺激,按钮按下或计时器滴答。
另一件事是,每个刻度都会更新数组,这应该反映在最终的打印数组中,所以我会在打印数组之前清除屏幕还是类似的东西?
感谢。
编辑:刚刚再次查看了我的代码,我在问题中意识到我在外部for循环中省略了println。它应该逐行打印,而不是全部作为一行打印。上述代码已经更正以反映这一点。答案 0 :(得分:2)
如果您使用JTable
而不是尝试直接输出文本,那么它可能会更有意义(并且更容易阅读)。 Here's an example of what it might look like。您可以在每个刻度上更新TableModel
,而不必担心清除屏幕。
另一件非常重要的事情是,当您更新TableModel
时,必须根据Swing's threading policy完成。这意味着您可能必须执行以下操作,从任何线程进行更新:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// Update row/rows of table model here
}
});
答案 1 :(得分:1)
如果您只想让文本出现在gui中,首先需要构造要显示的字符串。因此,您可以将先前打印到控制台的字符串连接到一个字符串。
然后你可以使用JTextArea来显示它。您甚至可以使用JLabel或直接绘制JPanel。
要更新显示,您需要再次在TextArea中设置新文本。
答案 2 :(得分:1)
有很多方法可以显示文本数据,每种方法都有不同情况下的优点和缺点:
1)文字控制:
也简称为文本字段,文本控件只能显示一个 可编辑文本行。像按钮一样,它们会生成动作事件。使用 他们从用户那里获得少量的文字信息 文本输入完成后执行操作。
JTextField
2)纯文本编辑:
JTextArea可以显示多行可编辑文本。虽然是文字 区域可以显示任何字体的文本,所有文本都是相同的 字体。使用文本区域允许用户输入未格式化的文本 任何长度或显示未格式化的帮助信息。
3)样式文字区域:
样式化文本组件可以使用多个显示可编辑文本 字体。一些样式的文本组件允许嵌入图像甚至 嵌入式组件。样式化的文本组件功能强大 多面组件适合高端需求,并提供更多 自定义的途径比其他文本组件。
3)JLabel
使用JLabel类,您可以显示不可选择的文本和图像。 如果您需要创建一个显示字符串,图像或组件的组件 两者都可以通过使用或扩展JLabel来实现。如果组件是 交互式并具有特定状态,使用按钮代替标签。
4)JTable
(+1给@AndrewThompsons评论)
使用JTable类,您可以选择显示数据表 允许用户编辑数据。 JTable不包含或缓存 数据;它只是一个数据视图。
以上所有内容均与oracle的相关示例/信息相关联。
下一个问题是将组件放在您想要的位置:
为此,Swing有各种内置LayoutManager
s。
有关详情,请参阅Laying Out Components Within a Container。
至于:
另一件事是,数组将在每次滴答时更新,并且 这应该反映在最终的印刷阵列中,所以我会去 关于在打印阵列之前清除屏幕 类似
使用Swing Timer确保您的Gui从EDT更新。
JTable
以外的大多数组件都有简单的setText(String s)
和getText()
方法。
在其中一个实例上调用setText
将使旧文本被新文本覆盖。所以不需要你必须清除它,只需调用添加新文本的文本的相同方法。要附加文字,您在使用getText()
时会使用setText(String s)
和append(String s)
或JTextArea
的组合。
如果这不是您想要的,请尝试更具体地说明预期的输出,或者发布SSCCE来展示您拥有并正在努力实现的目标。