Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

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);

    }
}