grefic 2015-07-21 16:37 采纳率: 100%
浏览 1573
已采纳

请教Java的Frame框架遇到的问题

怎样把控制台中输出的东西在Frame框架中的滚动窗口中输出。在线急等赐教

  • 写回答

2条回答

  • JonsonJiao 2015-07-22 02:13
    关注

    // 核心代码就是重定向输出流的位置,这里需要复写print方法

    
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.PrintStream;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    
    public class OutCapture extends JFrame {
    
        private static final long serialVersionUID = -7094759145284455963L;
    
        public OutCapture() {
            Container contentPane = this.getContentPane();
            contentPane.setLayout(new BorderLayout());
    
            final JTextArea textArea = new JTextArea();
            JScrollPane scrollPanel = new JScrollPane();
            scrollPanel.setViewportView(textArea);
            contentPane.add(scrollPanel, BorderLayout.CENTER);
    
            JButton btn = new JButton("输出");
            contentPane.add(btn, BorderLayout.SOUTH);
            btn.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    for (int i = 0; i < 100; i++) {
                        System.out.println(i);
                    }
                }
            });
    
            // 核心代码就是重定向输出流的位置,这里需要复写print方法
            System.setOut(new PrintStream(new OutputStream() {
                @Override
                public void write(int b) throws IOException {
    
                }
            }, true) {
                @Override
                public void print(String txt) {
                    textArea.append(txt);
                    textArea.setCaretPosition(textArea.getText().length());
                }
    
                @Override
                public void println(String txt) {
                    print(txt + "\n");
                }
    
                @Override
                public void print(boolean b) {
                    print(b ? "true" : "false");
                }
    
                public void println(boolean b) {
                    print(String.valueOf(b) + "\n");
                }
    
                @Override
                public void print(char c) {
                    print(String.valueOf(c));
                }
    
                public void println(char c) {
                    print(String.valueOf(c) + "\n");
                }
    
                @Override
                public void print(int i) {
                    print(String.valueOf(i));
                }
    
                public void println(int i) {
                    print(String.valueOf(i) + "\n");
                }
    
                @Override
                public void print(long l) {
                    print(String.valueOf(l));
                }
    
                public void println(long l) {
                    print(String.valueOf(l) + "\n");
                }
    
                @Override
                public void print(double d) {
                    print(String.valueOf(d));
                }
    
                public void println(double d) {
                    print(String.valueOf(d) + "\n");
                }
    
                @Override
                public void print(float f) {
                    print(String.valueOf(f));
                }
    
                public void println(float f) {
                    print(String.valueOf(f) + "\n");
                }
    
                @Override
                public void print(char s[]) {
                    print(String.valueOf(s));
                }
    
                public void println(char s[]) {
                    print(String.valueOf(s) + "\n");
                }
    
                @Override
                public void print(Object obj) {
                    print(String.valueOf(obj));
                }
    
                public void println(Object obj) {
                    print(String.valueOf(obj) + "\n");
                }
    
            });
        }
    
        public static void main(String[] args) {
            OutCapture oc = new OutCapture();
            oc.setLocationRelativeTo(null);
            oc.setSize(400, 400);
            oc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            oc.setVisible(true);
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?