我在下面发布了两段代码.两个代码单独工作正常.现在,当我运行文件 Easy 并单击开始"按钮时,我希望实现 AddNumber 类.我的意思是说,除了在控制台上运行 AddNumber 之外,有什么方法可以让 AddNumber 在单击开始"按钮后在第一堂课中创建的 JTextArea 中运行?我想也许是通过动作监听器?(我们在按钮的情况下做的方式)但我不确定.有没有其他方法可以让我的 JTextArea 充当其他 .java 文件的控制台?
import java.awt.*;导入 javax.swing.*;导入 java.awt.event.*;公共类 Easy 扩展 JFrame{JTextArea 文本=新 JTextArea();JPanel 面板=新 JPanel(新 GridLayout(2,2));JButton button1 =new JButton("开始");公共容易(){panel.add(文本);panel.add(button1);添加(面板,BorderLayout.CENTER);button1.addActionListener(new ActionListener() {公共无效actionPerformed(ActionEvent ae){//添加代码以调用其他类并使 JTextArea 充当控制台}});}公共静态无效主要(字符串arg []){简易框架=新简易();frame.setSize(300,100);frame.setVisible(true);}}第二课:
导入 java.util.Scanner;类 AddNumber{公共静态无效主(字符串参数 []){整数 x, y, z;System.out.println("输入两个要相加的数字");扫描仪输入 = 新扫描仪(System.in);x = in.nextInt();y = in.nextInt();z = x + y;System.out.println("输入数字的总和 = "+z);}}我看过一些关于 PrintStream 的帖子.但我认为这不适用于这里.请帮帮我.谢谢:)
更新:我找到了这个链接:http://www.codeproject.com/Articles/328417/Java-Console-apps-made-easy#HowtousethisJavaConsole1 它的工作原理是它显示输入两个要添加的数字"......但在哪里可以用户提供他的输入?
我只需要在我的班级的主要方法中引用控制台......它工作......好吧,不完全像我希望的那样......但部分......输入还是要从IDE的终端去..
如果你在 Google 上搜索:stdout JTextArea",你会找到几个链接来解决你的问题.
在最后一个链接中,buddybob 扩展了 java.io.OutputStream 以将标准输出打印到他的 JTextArea.我在下面附上了他的解决方案.
<代码>/*** @(#) TextAreaOutputStream.java**/导入 java.io.IOException;导入 java.io.OutputStream;导入 javax.swing.JTextArea;/*** 将其输出写入 javax.swing.JTextArea 的输出流* 控制.** @作者兰加纳特·基尼* @see javax.swing.JTextArea*/公共类 TextAreaOutputStream 扩展 OutputStream {私有 JTextArea 文本控件;/*** 创建一个 TextAreaOutputStream 的新实例,它写入* 到 javax.swing.JTextArea 控件的指定实例.** @param control 对 javax.swing.JTextArea 的引用* 必须将输出重定向到的控件* 到.*/公共TextAreaOutputStream(JTextArea控件){文本控制 = 控制;}/*** 将指定字节作为字符写入* javax.swing.JTextArea.** @param b 要作为字符写入的字节* JTextArea.*/公共无效写入(int b)抛出 IOException {//将数据作为字符附加到 JTextArea 控件textControl.append(String.valueOf((char)b));}}<块引用>
TextAreaOutputStream 扩展了 java.io.OutputStream 类并覆盖其 write(int) 方法重载,此类使用引用 javax.swing.JTextArea 控件实例,然后每当调用它的 write( int b ) 方法时,将输出附加到它.
要使用 TextAreaOutputStream 类,[yo]你应该使用:
//创建 javax.swing.JTextArea 控件的实例JTextArea txtConsole = new JTextArea();//现在创建一个新的 TextAreaOutputStream 来写入我们的 JTextArea 控件并包装一个//围绕它的 PrintStream 以支持 println/printf 方法.PrintStream out = new PrintStream(new TextAreaOutputStream(txtConsole));//将标准输出流重定向到 TextAreaOutputStreamSystem.setOut(out);//将标准错误流重定向到 TextAreaOutputStreamSystem.setErr(out);//现在测试机制System.out.println("Hello World");I have posted two pieces of code below. Both codes work fine individually. Now, when I run the file Easy, and click on the "Start" button, I want the class AddNumber to be implemented. I mean to say that, instead of the AddNumber running on the console, is there any way I could make AddNumber run in the JTextArea i have created in the first class upon clicking the "Start" button? I thought maybe by action listener?(the way we do in case of buttons) But I'm not sure. Is there any other way to make my JTextArea act as a console for the other .java files?
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);
}
}
The second class:
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);
}
}
I have seen a few posts talking about PrintStream..but i don't think that applies here. Please help me out. Thanks :)
UPDATE: well i found this link: http://www.codeproject.com/Articles/328417/Java-Console-apps-made-easy#HowtousethisJavaConsole1 and it works in the sense that it shows "Enter two numbers to be added "...but where can the user provide his input?
EDIT: I just had to make a reference of the console in the main method of my class...and it works... well, not exactly as i would've wished to..but partly..the input still has to go from the terminal of the IDE..
If you do a Google search for: "stdout JTextArea", you will a couple of links to solve your problem.
In the last link, buddybob extends java.io.OutputStream to print standard output to his JTextArea. I included his solution below.
/*
*
* @(#) 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 ) );
}
}
The
TextAreaOutputStreamextends thejava.io.OutputStreamclass and overrides itswrite(int)method overload, this class uses a reference to ajavax.swing.JTextAreacontrol instance and then appends output to it whenever its write( int b ) method is called.To use the
TextAreaOutputStreamclass, [yo]u should use:
// 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" );
这篇关于JTextArea 作为控制台的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
上传进度侦听器未触发(Google 驱动器 API)Upload progress listener not fired (Google drive API)(上传进度侦听器未触发(Google 驱动器 API))
使用 Google Drive SDK 将文件保存在特定文件夹中Save file in specific folder with Google Drive SDK(使用 Google Drive SDK 将文件保存在特定文件夹中)
Google Drive Android API - 无效的 DriveId 和 Null ResourcGoogle Drive Android API - Invalid DriveId and Null ResourceId(Google Drive Android API - 无效的 DriveId 和 Null ResourceId)
谷歌驱动api服务账户查看上传文件到谷歌驱动使Google drive api services account view uploaded files to google drive using java(谷歌驱动api服务账户查看上传文件到谷歌驱动使用java
Google Drive 服务帐号返回 403 usageLimitsGoogle Drive service account returns 403 usageLimits(Google Drive 服务帐号返回 403 usageLimits)
com.google.api.client.json.jackson.JacksonFactory;Google Drcom.google.api.client.json.jackson.JacksonFactory; missing in Google Drive example(com.google.api.client.json.jackson.JacksonFactory;Google Drive 示例