当前位置: 首页 > 面试题库 >

在GUI面板中创建Java控制台

胡玉书
2023-03-14
问题内容

如何在GUI面板中创建Java控制台的实例?


问题答案:

这是一个正常运行的类。你可以使用以下方法将其实例安装到系统中,然后执行err:

PrintStream con=new PrintStream(new TextAreaOutputStream(...));
System.setOut(con);
System.setErr(con);

方法中正确记录和删除了文本区域中的行,run()以避免在控制台充斥输出时可能发生的追加和删除之间的竞争状况。最终结果对我来说也更干净。

import java.awt.*;
import java.io.*;
import java.util.*;
import java.util.List;
import javax.swing.*;

public class TextAreaOutputStream
extends OutputStream
{

// *************************************************************************************************
// INSTANCE MEMBERS
// *************************************************************************************************

private byte[]                          oneByte;                                                    // array for write(int val);
private Appender                        appender;                                                   // most recent action

public TextAreaOutputStream(JTextArea txtara) {
    this(txtara,1000);
    }

public TextAreaOutputStream(JTextArea txtara, int maxlin) {
    if(maxlin<1) { throw new IllegalArgumentException("TextAreaOutputStream maximum lines must be positive (value="+maxlin+")"); }
    oneByte=new byte[1];
    appender=new Appender(txtara,maxlin);
    }

/** Clear the current console text area. */
public synchronized void clear() {
    if(appender!=null) { appender.clear(); }
    }

public synchronized void close() {
    appender=null;
    }

public synchronized void flush() {
    }

public synchronized void write(int val) {
    oneByte[0]=(byte)val;
    write(oneByte,0,1);
    }

public synchronized void write(byte[] ba) {
    write(ba,0,ba.length);
    }

public synchronized void write(byte[] ba,int str,int len) {
    if(appender!=null) { appender.append(bytesToString(ba,str,len)); }
    }

@edu.umd.cs.findbugs.annotations.SuppressWarnings("DM_DEFAULT_ENCODING")
static private String bytesToString(byte[] ba, int str, int len) {
    try { return new String(ba,str,len,"UTF-8"); } catch(UnsupportedEncodingException thr) { return new String(ba,str,len); } // all JVMs are required to support UTF-8
    }

// *************************************************************************************************
// STATIC MEMBERS
// *************************************************************************************************

    static class Appender
    implements Runnable
    {
    private final JTextArea             textArea;
    private final int                   maxLines;                                                   // maximum lines allowed in text area
    private final LinkedList<Integer>   lengths;                                                    // length of lines within text area
    private final List<String>          values;                                                     // values waiting to be appended

    private int                         curLength;                                                  // length of current line
    private boolean                     clear;
    private boolean                     queue;

    Appender(JTextArea txtara, int maxlin) {
        textArea =txtara;
        maxLines =maxlin;
        lengths  =new LinkedList<Integer>();
        values   =new ArrayList<String>();

        curLength=0;
        clear    =false;
        queue    =true;
        }

    synchronized void append(String val) {
        values.add(val);
        if(queue) { queue=false; EventQueue.invokeLater(this); }
        }

    synchronized void clear() {
        clear=true;
        curLength=0;
        lengths.clear();
        values.clear();
        if(queue) { queue=false; EventQueue.invokeLater(this); }
        }

    // MUST BE THE ONLY METHOD THAT TOUCHES textArea!
    public synchronized void run() {
        if(clear) { textArea.setText(""); }
        for(String val: values) {
            curLength+=val.length();
            if(val.endsWith(EOL1) || val.endsWith(EOL2)) {
                if(lengths.size()>=maxLines) { textArea.replaceRange("",0,lengths.removeFirst()); }
                lengths.addLast(curLength);
                curLength=0;
                }
            textArea.append(val);
            }
        values.clear();
        clear =false;
        queue =true;
        }

    static private final String         EOL1="\n";
    static private final String         EOL2=System.getProperty("line.separator",EOL1);
    }

} /* END PUBLIC CLASS */


 类似资料:
  • 如何在Java中创建一个苹果面板类型的窗口?面板类型窗口的图片可以在这里找到。我找到了一些关于窗口的东西。类型,但那Java7,我正在使用Java6。 基本上,在示例下面(链接中)有一个面板的图像。请注意,关闭/最小化/最大化栏比其他栏小。

  • 控制面板用于展示平台的参数指标等信息,便于用户快速了解系统使用情况。 控制面板用于展示平台的参数指标等信息,便于用户快速了解系统使用情况。 云联壹云 新版控制面板内置管理后台视图、域管理后台视图和项目视图的默认模板,且支持自定义任意视图下的控制面板的显示指标,针对用户需求定制专属用户的控制面板。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “控制面板” 菜单项,进入控制面板页面。

  • 我是一个Java GUI初学者,在让我的面板按照我想要的方式进行更新方面遇到了一些麻烦。基本上,当用户点击我的GUI中的一个按钮时,屏幕上当前的形状应该改变为与按钮按下对应的任何形状。我的代码在下面。更新后的形状在显示前被原始形状覆盖的问题。 最后,这里是我的框架类: 谢谢你的帮助!

  • 我最近开始用Java编码。我在我的电脑上安装了JRE,它有一个Java控制面板和更新程序。我听说用Java编码,我们需要JDK而不是JRE。所以我卸载了JRE。我还听说JDK有一个内置的JRE,但它没有Java控制面板或更新调度器。

  • 控制面板显示项目中发生的所有问题,为您提供查看,管理和报告工作进度的灵活方式。 Jira中存在三种类型的控制面板: 下一代板 这个板对那些刚接触敏捷的人很有用。它是一个非常简化,直接和流线型的板。 Scrum板 当团队处理包含待办事项的冲刺时,此板很有用。 看板 看板是一种灵活的项目管理工具,专为工作可视化,限制在制品和最大化效率而设计。 Scrum板 Scrum板分为三个部分: 积压 积压(ba

  • 粒子控制面板 粒子控制面板可对在编辑器中选中的粒子进行一些操作,界面如下图: 可进行如下操作: :播放/暂停粒子 :重新播放粒子 :停止播放粒子 Playback Speed:调整粒子播放速度 Playback Time:显示粒子播放时长 Particles:显示当前粒子数量