【问题标题】:JTextArea as consoleJTextArea 作为控制台
【发布时间】:2013-11-18 23:49:58
【问题描述】:

我在下面发布了两段代码。两个代码单独工作正常。现在,当我运行文件 Easy 并单击“开始”按钮时,我希望实现 AddNumber 类。我的意思是说,除了在控制台上运行 AddNumber 之外,有什么方法可以让 AddNumber 在单击“开始”按钮后在第一堂课中创建的 JTextArea 中运行?我想也许是通过动作监听器?(我们在按钮的情况下做的方式)但我不确定。有没有其他方法可以让我的 JTextArea 充当其他 .java 文件的控制台?

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


public class Easy extends JFrame{

    JTextArea text=new JTextArea();
    JPanel panel=new JPanel(new GridLayout(2,2));

    JButton button1 =new JButton("Start");

    public Easy(){

        panel.add(text);

        panel.add(button1);
        add(panel,BorderLayout.CENTER);

        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae){
            //add code to call the other class and make the JTextArea act as a console
            }
        });
   }

   public static void main(String arg[]){
       Easy frame=new Easy();
       frame.setSize(300,100);
       frame.setVisible(true);
   }
}

第二课:

import java.util.Scanner;

class AddNumber
{
    public static void main(String args[])
    {
        int x, y, z;
        System.out.println("Enter two numbers to be added ");
        Scanner in = new Scanner(System.in);
        x = in.nextInt();
        y = in.nextInt();
        z = x + y;
        System.out.println("Sum of entered numbers = "+z);
    }
}

我看过一些关于 PrintStream 的帖子。但我认为这不适用于这里。 请帮帮我。谢谢:)

更新:我找到了这个链接:http://www.codeproject.com/Articles/328417/Java-Console-apps-made-easy#HowtousethisJavaConsole1,它的工作原理是它显示“输入要添加的两个数字”......但是用户可以在哪里提供他的输入?

编辑:我只需要在我的班级的主要方法中引用控制台......它工作......好吧,不完全像我希望的那样......但部分......输入还是要从IDE的终端去..

【问题讨论】:

    标签: java swing console console-application jtextarea


    【解决方案1】:

    如果您在 Google 上搜索:“stdout JTextArea”,您将获得几个链接来解决您的问题。

    在最后一个链接中,buddybob 扩展了java.io.OutputStream 以将标准输出打印到他的 JTextArea。我在下面附上了他的解决方案。

    TextAreaOutputStream.java

    /*
    *
    * @(#) TextAreaOutputStream.java
    *
    */
    
    import java.io.IOException;
    import java.io.OutputStream;
    import javax.swing.JTextArea;
    
    /**
    * An output stream that writes its output to a javax.swing.JTextArea
    * control.
    *
    * @author  Ranganath Kini
    * @see      javax.swing.JTextArea
    */
    public class TextAreaOutputStream extends OutputStream {
        private JTextArea textControl;
    
        /**
         * Creates a new instance of TextAreaOutputStream which writes
         * to the specified instance of javax.swing.JTextArea control.
         *
         * @param control   A reference to the javax.swing.JTextArea
         *                  control to which the output must be redirected
         *                  to.
         */
        public TextAreaOutputStream( JTextArea control ) {
            textControl = control;
        }
    
        /**
         * Writes the specified byte as a character to the
         * javax.swing.JTextArea.
         *
         * @param   b   The byte to be written as character to the
         *              JTextArea.
         */
        public void write( int b ) throws IOException {
            // append the data as characters to the JTextArea control
            textControl.append( String.valueOf( ( char )b ) );
        }  
    }
    

    TextAreaOutputStream 扩展了 java.io.OutputStream 类 并覆盖其write(int) 方法重载,此类使用 引用 javax.swing.JTextArea 控件实例,然后 每当调用其 write(int b) 方法时,将输出附加到它。

    要使用TextAreaOutputStream 类,[yo]你应该使用:

    用法

    // Create an instance of javax.swing.JTextArea control
    JTextArea txtConsole = new JTextArea();
    
    // Now create a new TextAreaOutputStream to write to our JTextArea control and wrap a
    // PrintStream around it to support the println/printf methods.
    PrintStream out = new PrintStream( new TextAreaOutputStream( txtConsole ) );
    
    // redirect standard output stream to the TextAreaOutputStream
    System.setOut( out );
    
    // redirect standard error stream to the TextAreaOutputStream
    System.setErr( out );
    
    // now test the mechanism
    System.out.println( "Hello World" );
    

    【讨论】:

    • 您好,感谢您的回答。上面的代码是否意味着我应该创建另一个 .java 文件 TextAreaOutputStream。然后将使用代码添加到我的 AddNumber 类的 main 方法中?因为我没有看到任何变化……或者我不太了解它?
    • 好吧,正如用法所暗示的,您需要传递您的JTextArea 的引用并将系统输出设置到您的AddNumber 类中,以便您的系统调用被发送到JTextArea
    • 我似乎仍然无法让它工作 :( 很抱歉很烦人,但是已经尝试了很长一段时间没有成功..
    • 这对我不起作用......当应用代码时,我的控制台和我的 TextArea 都不显示任何系统输出......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    相关资源
    最近更新 更多