java - 控制台输出到框架、文本区域?

标签 java swing jframe jbutton jtextarea

我正在学习java,我创建了一个骰子 throw 器 - 当我按下按钮时它会扔一个骰子 - 但输出在控制台中。如何与按钮在同一帧中输出。

//抱歉,我不是以英语为母语的人,但我希望你明白。

import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JTextArea;

public class Main {

public static void main(String s[]){
    Random  rand = new Random();

    JFrame frame = new JFrame("Dice Thrower 2000");
    JPanel panel=new JPanel();
    panel.setLayout(new FlowLayout());
    JLabel label = new JLabel("Throw dice");
    JLabel label1 = new JLabel("You got : ");
    JTextArea output = new JTextArea(" a ");

    JButton buttond4  = new JButton();
    buttond4.setText("d4");
    buttond4.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            int n = rand.nextInt(4) + 1;
            System.out.println("You threw d4 and got " + n);

        }
    });


    JButton buttond6 = new JButton();
    buttond6.setText("d6");
    buttond6.addActionListener(new ActionListener() {...});

    JButton buttond8 = new JButton();
    buttond8.setText("d8");
    buttond8.addActionListener(new ActionListener() {...});

    JButton buttond10 = new JButton();
    buttond10.setText("d10");
    buttond10.addActionListener(new ActionListener() {...});


    JButton buttond12 = new JButton();
    buttond12.setText("d12");
    buttond12.addActionListener(new ActionListener() {...});

    JButton buttond20 = new JButton();
    buttond20.setText("d20");
    buttond20.addActionListener(new ActionListener() {...});

    panel.add(label);
    panel.add(buttond4);

    panel.add(buttond6);
    panel.add(buttond8);
    panel.add(buttond10);
    panel.add(buttond12);
    panel.add(buttond20);
    panel.add(label1);



    frame.add(output);
    frame.add(panel);
    frame.setSize(500, 200);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

}

我提供了按钮 d4 - 扩展代码,其余按钮的代码几乎相同。

最佳答案

使用System.out.println("You threw d4 and got " + n);导致打印到控制台。

您应该使用 JTextArea#append 方法代替。 您的代码将变为:

final JTextArea output = new JTextArea(" a ");

JButton buttond4  = new JButton();
buttond4.setText("d4");
buttond4.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        int n = rand.nextInt(4) + 1;
        output.append("You threw d4 and got " + n + "\n");

    }
});

编辑:

您还需要添加 outputJFrame 。您尝试过使用

frame.add(output);
frame.add(panel);

但这行不通。 JFrame 的内容 Pane 默认情况下有一个 BorderLayout ,并调用 add将在 BorderLayout#CENTER 中添加组件。该区域只能包含一个组件。

现在您有两个选择:

  • 更改 LayoutManagerThis是对可用标准的一个很好的概述 LayoutManager
  • 保持当前LayoutManager ,并将两个组件添加到不同的区域,例如

    frame.add(output, BorderLayout.CENTER);
    frame.add(panel, BorderLayout.SOUTH);
    

关于java - 控制台输出到框架、文本区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32790698/

相关文章:

java - 设置运行tomcat的内存缓存窗口

java - 将 HTML/CSS 集成到 JavaFX 的 FXML 和 CSS 中

java - 代码模型数组

java - JTextArea如何查找列数/行宽?

java - JTable 中的列名未更新

java - 如何通过按钮将一个JFrame的所有数据传输到另一个JFrame?

Java包和类路径问题

java - 程序将识别某些关键输入,但不能识别其他输入。

java - JPanels 文本字段 GBC

java - Web 服务器可以在没有请求的情况下将数据发送到桌面应用程序吗?