⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jtableappender.java

📁 log4j的源码
💻 JAVA
字号:
/* * Copyright 1999-2005 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.log4j.gui;import org.apache.log4j.helpers.CyclicBuffer;import org.apache.log4j.helpers.LogLog;import org.apache.log4j.Priority;import org.apache.log4j.Category;import org.apache.log4j.Layout;import org.apache.log4j.PatternLayout;import org.apache.log4j.spi.LoggingEvent;import javax.swing.JList;import javax.swing.AbstractListModel;import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JTable;import javax.swing.JTextArea;import javax.swing.table.AbstractTableModel;import javax.swing.table.TableCellRenderer;import javax.swing.JScrollPane;import javax.swing.ListCellRenderer;import java.awt.Component;import java.awt.FlowLayout;import javax.swing.BoxLayout;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.Container;import javax.swing.ImageIcon;import java.awt.Image;import java.awt.Toolkit;import java.net.URL;import java.awt.Rectangle;public class JTableAppender extends JTable {  static Category cat = Category.getInstance(JTableAppender.class.getName());  PatternLayout layout;  public  JTableAppender() {    layout = new PatternLayout("%r %p %c [%t] -  %m");    this.setDefaultRenderer(Object.class, new Renderer());  }  public  void add(LoggingEvent event) {    ((JTableAppenderModel)getModel()).add(event);  }  public  Dimension getPreferredSize() {    System.out.println("getPreferredSize() called");    return super.getPreferredSize();  }  static public void main(String[] args) {    JFrame frame = new JFrame("JListView test");    Container container = frame.getContentPane();    JTableAppender appender = new JTableAppender();        JTableAppenderModel model = new                               JTableAppenderModel(Integer.parseInt(args[0]));    appender.setModel(model);    //appender.createDefaultColumnsFromModel();        JScrollPane sp = new JScrollPane(appender);    sp.setPreferredSize(new Dimension(250, 80));        container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS));    //container.add(view);    container.add(sp);    JButton button = new JButton("ADD");    container.add(button);        button.addActionListener(new JTableAddAction(appender));    frame.setVisible(true);    frame.setSize(new Dimension(700,700));    long before = System.currentTimeMillis();    int RUN = 10000;    int i = 0;    while(i++ < RUN) {            LoggingEvent event = new LoggingEvent("x", cat, Priority.ERROR, 					    "Message "+i, null);      event.getThreadName();      if(i % 10 == 0) {	//event.throwable = new Exception("hello "+i);      }      appender.add(event);    }    long after = System.currentTimeMillis();    System.out.println("Time taken :"+ ((after-before)*1000/RUN));  }  class Renderer extends JTextArea implements TableCellRenderer {    Object o = new Object();    int i = 0;    public    Renderer() {      System.out.println("Render() called ----------------------");          }    public Component getTableCellRendererComponent(JTable table,						   Object value,						   boolean isSelected,						   boolean hasFocus,						   int row,						   int column) {      System.out.println(o + " ============== " + i++);      //LogLog.error("=======", new Exception());      //setIcon(longIcon);      if(value instanceof LoggingEvent) {	LoggingEvent event = (LoggingEvent) value;	String str = layout.format(event);	String t = event.getThrowableInformation();		if(t != null) {	  System.out.println("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");	  setText(str + Layout.LINE_SEP + t);	} else {		  setText(str);	}	      } else {	setText(value.toString());      }      return this;    }  }}class JTableAppenderModel extends AbstractTableModel {  CyclicBuffer cb;    JTableAppenderModel(int size) {    cb = new CyclicBuffer(size);  }  public  void add(LoggingEvent event) {    //System.out.println("JListViewModel.add called");    cb.add(event);    int j = cb.length();    fireTableDataChanged();  }  public   int getColumnCount() {     return 1;   }  public int getRowCount() {     return cb.length();  }  //public  //Class getColumnClass(int index) {  //  System.out.println("getColumnClass called " + index);  //  return LoggingEvent.class;  //}  public   Object getValueAt(int row, int col) {    return cb.get(row);  }}class JTableAddAction implements ActionListener {      int j;  JTableAppender appender;  Category cat = Category.getInstance("x");    public  JTableAddAction(JTableAppender appender) {    this.appender = appender;    j = 0;  }      public  void actionPerformed(ActionEvent e) {    System.out.println("Action occured");    LoggingEvent event = new LoggingEvent("x", cat, Priority.DEBUG, 					    "Message "+j, null);        if(j % 5 == 0) {      //event.throwable = new Exception("hello "+j);    }    j++;    appender.add(event);  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -