我在下面发布了两段代码。两种代码都可以单独正常工作。现在,当我运行文件Easy并单击“开始”按钮时,我希望实现类AddNumber。我的意思是说,单击“开始”按钮后,有什么方法可以让AddNumber在我在第一类中创建的JTextArea中运行,而不是在控制台上运行?我想也许是通过 Action 监听器?(在按钮情况下,我们该怎么做)但我不确定。还有其他方法可以使我的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的终端。

最佳答案

如果您在Google搜索中搜索“stdout JTextArea”,则将有几个链接可以解决您的问题。

  • http://www.coderanch.com/t/458147/GUI/java/Redirect-output-stderr-stdout-JTextArea
  • Redirecting System.out to JTextPane
  • http://www.jcreator.com/forums/index.php?showtopic=773

  • 在最后一个链接中,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 ) );
        }
    }
    



    用法
    // 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" );
    

    10-07 12:09
    查看更多