将图像插入JTextPane错误

时间:2012-01-31 17:08:11

标签: java swing icons jtextpane imageicon

之前我问过这个问题,但是,我决定用SCCE启动一个新线程,它成功编译,但它没有插入图像。任何人都可以解决为什么这样做?谢谢,克里斯。

以下是完整代码:

package mathnotesplus;

import java.awt.Dimension;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JTextPane;

import javax.swing.JFrame;

import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.text.*;
/**
 *
 * @author ChrisCates
 */
public class MathNotesPlus extends JFrame implements TreeSelectionListener {

    /**
     * @param args the command line arguments
     */
    public MathNotesPlus() {
        setTitle("Math Notes Plus");
        setSize(800, 600);
        initUI();
    }


    JPanel panel;
    JTextPane textpane;
    JTree navigation;
    StyledDocument document;

    public void initUI(){
        //The panel.
        panel = new JPanel();
        //Textpane and JTree
        textpane = new JTextPane();
        navigation = new JTree();
        navigation.addTreeSelectionListener(this);
        //Preferred Resolution Size
        navigation.setPreferredSize(new Dimension(100, 600));
        textpane.setPreferredSize(new Dimension(700, 600));

        //Insertion of image into the document.
        try {
            document = (StyledDocument)textpane.getDocument();
            Style style = document.addStyle("StyleName", null);
            StyleConstants.setIcon(style, new ImageIcon("sigma.png"));
            document.insertString(document.getLength(), "ignored text", style);
        } catch (BadLocationException e){
            System.err.println("ERROR");
        }

        //Putting everything into the program.
        panel.add(navigation);
        panel.add(textpane);        
        add(panel);
        pack();


    }

    public static void main(String[] args) {
        // TODO code application logic here
        SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            MathNotesPlus app = new MathNotesPlus();
                app.setVisible(true);
            }
        });
    }

    @Override
    public void valueChanged(TreeSelectionEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

1 个答案:

答案 0 :(得分:2)

基于这个工作示例(代码的一个非常接近的变体)可行,我只能猜测你的代码失败了,因为没有找到图像。

import java.awt.Dimension;
import java.awt.Image;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import javax.swing.text.*;
import java.net.URL;
import javax.imageio.ImageIO;

public class MathNotesPlus extends JFrame {

    JPanel panel;
    JTextPane textpane;
    StyledDocument document;

    public MathNotesPlus() {
        setTitle("Math Notes Plus");
        setSize(800, 600);
        initUI();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    public void initUI(){
        //The panel.
        panel = new JPanel();
        //Textpane
        textpane = new JTextPane();
        textpane.setPreferredSize(new Dimension(700, 600));

        //Insertion of image into the document.
        try {
            Image image = ImageIO.read(new URL(
                "http://pscode.org/media/stromlo1.jpg"));

            document = (StyledDocument)textpane.getDocument();
            Style style = document.addStyle("StyleName", null);
            StyleConstants.setIcon(style, new ImageIcon(image));
            document.insertString(document.getLength(), "ignored text", style);
        } catch (Exception e){
            e.printStackTrace();
        }

        //Putting everything into the program.
        panel.add(textpane);
        add(panel);
        pack();
    }

    public static void main(String[] args) {
        // TODO code application logic here
        SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            MathNotesPlus app = new MathNotesPlus();
                app.setVisible(true);
            }
        });
    }
}