OutputArea,用于模拟控制台输出信息的 Swing 控件
来源:互联网 发布:微信公众号开发java 编辑:程序博客网 时间:2024/06/05 06:08
(设计有点问题,已经更新为 : http://blog.csdn.net/raistlic/article/details/9833981)
一个自带了 Candy Strip Painting 的 OutputArea,它是个不能编辑的 JTextArea,用于输出信息,提供了友好的 getPrintStream() 方法,就是说,你可以方便的用 println, printf 等方法来输出信息。
import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Graphics;import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.ByteArrayOutputStream;import java.io.OutputStream;import java.io.PrintStream;import javax.swing.AbstractAction;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.SwingUtilities;import javax.swing.UIManager;public class OutputArea extends JTextArea { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } JFrame f = new JFrame("Test"); JPanel p = new JPanel(new BorderLayout()); final OutputArea a = new OutputArea(); a.setRows(30); p.add(new JScrollPane(a)); p.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); final JTextField field = new JTextField(100); p.add(field, BorderLayout.SOUTH); final PrintStream out = a.getPrintStream(); field.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { String s = field.getText(); field.setText(""); out.println(s); } }); JPanel control = new JPanel(new FlowLayout(FlowLayout.LEFT, 2, 2)); control.add(field); control.add(new JButton(new AbstractAction("Clear") { public void actionPerformed(ActionEvent ae) { a.setText(""); } })); p.add(control, BorderLayout.SOUTH); f.setContentPane(p); f.pack(); f.setMinimumSize(f.getSize()); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); field.requestFocusInWindow(); } }); } private final PrintStream ps; private Color candy; public OutputArea() { ps = new PrintStream(this.new AreaOutputStream()); candy = new Color(230, 230, 255); setOpaque(false); setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); setForeground(Color.GREEN.darker().darker().darker()); } @Override public final boolean isEditable() { return false; } public PrintStream getPrintStream() { return ps; } @Override protected void paintComponent(Graphics g) { int width = getWidth(); int height = getHeight(); Color old = g.getColor(); g.setColor(getBackground()); g.fillRect(0, 0, width, height); Rectangle r = new Rectangle(); r.x = 0; r.y = 0; r.width = width; r.height = getRowHeight(); g.setColor(candy); for(int heightIncrement = 2 * getRowHeight(); r.y < height; r.y += heightIncrement) { g.fillRect(r.x, r.y, r.width, r.height); } g.setColor(old); super.paintComponent(g); } private class AreaOutputStream extends OutputStream { ByteArrayOutputStream out = new ByteArrayOutputStream(); @Override public void write(int b) { out.write(b); if ('\n' == (char) b) { append(out.toString()); out.reset(); } } }}
- OutputArea,用于模拟控制台输出信息的 Swing 控件
- asp.net 查看控制台输出的信息
- Eclipse控制台输出信息的控制
- Eclipse控制台输出信息的控制
- Eclipse控制台输出信息的控制
- Eclipse控制台输出信息的控制
- Eclipse控制台输出信息的控制
- TOMCAT输出控制台信息
- 将PowerShell.exe的控制台信息输出成html信息
- VC开一个控制台窗口用于输出
- VC开一个控制台窗口用于输出
- 一个可以用于输出信息的窗口程序
- 模拟eclipse控制台显示打印信息的程序
- Myeclipse 控制台输出的信息总是红色的
- ANT控制台输出信息乱码
- Mybatis 控制台输出sql信息
- QtCreator输出信息到控制台
- 调用控制台应用程序并获得程序的输出信息
- 1508字符串转换成整数
- 一次谷歌面试趣事
- java.io.file 的常用文件操作
- apache 环境变量设置及rewrite规则
- 《算法竞赛-训练指南》第二章-2.2_UVa 11401
- OutputArea,用于模拟控制台输出信息的 Swing 控件
- VB.NET通过deletgrate传递线程的参数
- 类的访问权限 public,protect,private,final
- [每日一题] OCP1z0-047 :2013-08-07 SELECT---PRODUCT_INFORMATION...................27
- PaintCode 教程1:动态绘制按钮
- 关于android资源的命名规范
- 超级面试题网站
- [poj 1985]Cow Marathon[求树的直径][BFS]
- A*寻路算法实现文章(不完全翻译)