【问题标题】:How to display a text who is displayed in the console, in my TextArea?如何在我的 TextArea 中显示控制台中显示的文本?
【发布时间】:2019-10-19 18:15:59
【问题描述】:

作为我们第二学期项目的一部分,我们必须用 Java 创建一个逃脱游戏。

我们已经设法在控制台中显示我们的文本,但是,我们不能在我们的窗口(在另一个类中)中显示相同的文本。 我们知道我们必须使用 setText(),因为它是一个 TextArea,但我们不知道该怎么做。


private JTextArea texte;

private JButton button;

private JProgressBar bar;

public IHM() {
        this.window = new JFrame("Esc'App Game");

        this.window.setContentPane(this.panelCreation());

        this.window.pack();
        this.window.setVisible(true);

    }

public JPanel panelCreation() {
        JPanel panel = new JPanel();

        this.texte = new JTextArea("Erreur affichage de texte");

        texte.setText(""); // <- here 

        panel.add(texte);
        texte.getText();

        this.window.add(panel);

        return panel;
    }

还有我们的主要:


// Ask for the pseudo
Player p1 = new Player();
System.out.println(p1.getPseudo());

// change System.out to setText() ?

// Ask for the theme
Player.getTheme();

// Creation of a new Theme
Theme t1 = new Theme(Player.myTheme);

目前,我们没有任何结果或任何错误消息,因为我们没有任何想法。

【问题讨论】:

  • 而不是做:System.out.println(...),做类似的事情:myTextField.setText(...)
  • 当您提到它是另一个类时,您可以考虑将您的文本区域作为公共字段而不是私有字段。这样你就可以通过 yourClass.texte.setText("...");但是,最好的方法是为此字段创建一些 get/set 访问器。
  • @AntonioCalvente 糟糕的建议。他最好添加一个方法,这样他就不会将他的文本字段的完全访问权限授予不应该拥有它的类
  • @Stultuske 这就是为什么我添加了“但是”部分以避免公共访问:) 它仍然是一个学校项目,最好从一些可行的东西开始,然后改进它 IMO(这也是我提出它的原因作为评论而不是答案)
  • @AntonioCalvente 我已经尝试过这种方法(yourClass.texte.setText("...")),但在这种情况下它不起作用:(

标签: java swing class jtextarea settext


【解决方案1】:

你可以这样做:

public void println(String s) {
    try {
        int end = text.getDocument().getLength();
        text.getDocument().insertString(end, s + "\n", null);
    } catch (BadLocationException ex) {
        Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
    }
}

更新

public void println(String s) {
    SwingUtilities.invokeLater(()-> {
        try {
            int end = text.getDocument().getLength();
            text.getDocument().insertString(end, s + "\n", null);
        } catch (BadLocationException ex) {
            Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
        }
    });
}

【讨论】:

  • 我觉得这对我来说有点难,但谢谢:)
  • 这并不难。你觉得什么困难?
  • 一些行,我们已经在课堂上看到了 try 和 catch,但是之间的代码如下:` text.getDocument().getLength(); text.getDocument().insertString(end, s + "\n", null);` 对于我们的项目来说有点难以适应和理解
  • @ma26lle 1) 在IHM 类中声明方法println,2) 确保您可以从main 访问IHM 的实例,3) 替换System.out.println(p1.getPseudo()); ihm.println(p1.getPseudo());.
  • @ma26lle 实际上你是对的:如果执行它的线程不是事件调度线程,它可能会稍微复杂一些。查看我的更新
【解决方案2】:

您可以开始阅读Swing text components 上的官方 Oracle 教程。

在那里你会发现 JTextArea 有方法 setText()getText() 例如。为了准备做一些真正有用的事情,您可能想研究如何将models 用于您的组件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2021-09-12
    • 2018-07-13
    • 1970-01-01
    相关资源
    最近更新 更多