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条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器