首页javajtextpaneJava Swing - 如何在JTextPane中打印异常...

Java Swing - 如何在JTextPane中打印异常...

我们想知道如何在JTextPane中打印异常。...
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Element;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;

public class Main {

  private static AttributeSet getAttributes(MouseEvent e) {
    JTextPane text = (JTextPane) e.getSource();
    Point mouseLocation = new Point(e.getX(), e.getY());
    int pos = text.viewToModel(mouseLocation);

    if (pos >= 0) {
      try {
        Rectangle rect = text.modelToView(pos);
        int lowerCorner = rect.y + rect.height;
        if (e.getX() < rect.x && e.getY() < lowerCorner && pos > 0) {
          pos--;
        }
      } catch (BadLocationException ex) {
        ex.printStackTrace();
      }
      StyledDocument doc = text.getStyledDocument();
      Element element = doc.getCharacterElement(pos);
      return element.getAttributes();
    }
    return null;
  }

  public static ImageIcon createImage() {
    BufferedImage image = new BufferedImage(28, 28, BufferedImage.TYPE_INT_ARGB);
    Graphics g = image.getGraphics();
    g.setColor(Color.RED);
    g.fillRect(0, 0, 32, 32);
    g.dispose();
    return new ImageIcon(image);
  }

  public static final void main(String[] args) throws Exception {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JTextPane textPane = new JTextPane();
    textPane.addMouseMotionListener(new MouseAdapter() {
      public void mouseMoved(MouseEvent e) {
        AttributeSet style = getAttributes(e);
        if (style != null && StyleConstants.getIcon(style) != null) {
          textPane.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        } else {
          textPane.setCursor(Cursor.getDefaultCursor());
        }
      }
    });
    frame.add(new JScrollPane(textPane));

    StyledDocument doc = (StyledDocument) textPane.getDocument();

    SimpleAttributeSet style = new SimpleAttributeSet();
    StyleConstants.setIcon(style, createImage());

    doc.insertString(doc.getLength(), "this is a test", null);
    doc.insertString(doc.getLength(), "test", style);
    doc.insertString(doc.getLength(), "this is a test\n", null);
    doc.insertString(doc.getLength(), "another image", style);

    frame.pack();
    frame.setLocationByPlatform(true);
    frame.setVisible(true);

  }
}