OutputArea,用于模拟控制台输出信息的 Swing 控件
2013-08-07 19:43
1226 查看
(设计有点问题,已经更新为 : http://blog.csdn.net/raistlic/article/details/9833981)
一个自带了 Candy Strip Painting 的 OutputArea,它是个不能编辑的 JTextArea,用于输出信息,提供了友好的 getPrintStream() 方法,就是说,你可以方便的用 println, printf 等方法来输出信息。
一个自带了 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(); } } } }
相关文章推荐
- Swing:高性能控件——MessagePane,可用于显示系列信息
- java 程序获取在exe 在控制台输出的信息
- 将System.out输出在控制台的信息保存在文件中
- 在MFC程序中使用控制台输出打印信息
- ASP.NET MVC 获取项目路径与输出信息到控制台
- Window下Qt中用qDebug()输出调试信息到Console控制台的设置方法
- MFC程序输出调试信息到控制台
- vbs脚本信息输出到控制台(dos窗口)
- cocos2d-x-3.0rc0新工程的分辨率设置和控制台输出信息
- 调用DOS实现窗口隐藏并且把DOS控制台下输出信息写入文件中保存 笔记.
- 利用反射机制编写一个程序,这个程序能指定调用类的某个方法及构造方法,并把操作信息输出到控制台。
- Window下Qt中用qDebug()输出调试信息到Console控制台的设置方法
- 控制台下输出DLL的调试信息
- 捕获控制台输出信息
- MFC工程加入控制台调试信息输出
- 将远程调试的控制台信息输出至Eclipse
- 为一个text 控件添加一个样式,用于提示输入信息
- MFC中使用控制台输出调试信息
- MyEclipse 控制台 tomcat 输出信息乱码
- Linux下Tomcat 在控制台输出日志信息