将2d char数组打印到Swing Gui(Java)

时间:2013-01-05 15:49:54

标签: java swing

我目前正在尝试将基于控制台的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。它应该逐行打印,而不是全部作为一行打印。上述代码已经更正以反映这一点。

3 个答案:

答案 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)文字控制:

  

也简称为文本字段,文本控件只能显示一个   可编辑文本行。像按钮一样,它们会生成动作事件。使用   他们从用户那里获得少量的文字信息   文本输入完成后执行操作。

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来展示您拥有并正在努力实现的目标。