• JTextAreaDemo


    问题:java swing 图形界面程序,拖了一个JTextArea出来,程序中有很多地方调用JTextArea中的append这个方法不断往文本域结尾处追加数据,但是程序每次运行,总是在程序运行完成时才将最终的结果一股脑的填在该文本域上,中间运行时根本不对文本域添加任何数据。
    解决方法:
    JTextArea若只用append()函数会等到整个类方法运行完后才会将添加的内容统一添加到文本框中显示,之前只会暂存于缓存中,
    所以及时添加并显示文本要有两步:
    利用JTextArea从类 javax.swing.JComponent 继承来的方法paintImmediately来立即刷新JTextArea即可。

    JTextArea textArea=new JTextArea();
    textArea.append("进程2输出完毕!
    ");//紧跟在此后面加上下面语句即可
    textArea.paintImmediately(textArea.getBounds());

    其中getBounds()方法是获得组件的边界,API中对getBounds方法是这样说的:
    public Rectangle getBounds() 获得此对象的边界,用 Rectangle 对象的形式表示它。
    这些边界了指定此对象的宽度、高度和相对其父对象的位置。

    package swing.jtextarea;
    
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.concurrent.TimeUnit;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.SwingUtilities;
    
    /*2015-7-13*/
    public class JTextareaDemo {
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    JFrame frame = new JTextAreaJFrame();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setVisible(true);
                    frame.setLocationRelativeTo(null);
                }
            });
    
        }
    
    }
    
    class JTextAreaJFrame extends JFrame {
        private static final long serialVersionUID = -1886518634127203315L;
    
        private static final int DEFAULT_WIDTH = 400;
        private static final int DEFAULT_HEIGHT = 200;
    
        private JTextArea textarea;
    
        public JTextAreaJFrame() {
            setTitle(getClass().getSimpleName());
            setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
            textarea = new JTextArea();
            textarea.setLineWrap(true);
            textarea.setWrapStyleWord(true);
    
            add(new JScrollPane(textarea), BorderLayout.CENTER);
            JButton btn = new JButton("Print");
            btn.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        appendData();
                    } catch (InterruptedException e1) {
                        e1.printStackTrace();
                    }
                }
            });
    
            JPanel southPanel = new JPanel();
            southPanel.add(btn);
            add(southPanel, BorderLayout.SOUTH);
        }
    
        private void appendData() throws InterruptedException {
            for (int i = 0; i < 10; i++) {
                textarea.append(i + ":append!
    ");
    //            int length = textarea.getText().length();
    //            textarea.setCaretPosition(length);
                textarea.paintImmediately(textarea.getBounds());
    
                TimeUnit.SECONDS.sleep(1);
            }
    
        }
    
    }
  • 相关阅读:
    冒泡排序改
    冒泡排序 (基本类型),(引用类型)
    关于随机数列,对给定数目的自0开始步长为1的数字序列进行乱序。(可用作洗牌)
    Java基础之 移位操作
    保留代码,狼羊过河的问题(暂未理解)
    非计算机专业学习计算机
    CompletableFuture 捕获异常方式:handle、whenComplete、exceptionally
    nio socket聊天室
    java socket server接收并返回数据
    java socket套接字编程入门
  • 原文地址:https://www.cnblogs.com/softidea/p/4644228.html
Copyright © 2020-2023  润新知