【问题标题】:Inserting Images into a JTextPane Error将图像插入 JTextPane 错误
【发布时间】:2012-01-31 17:08:11
【问题描述】:

我之前问过这个问题,但是,我决定用 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.");
    }
}

【问题讨论】:

    标签: java swing icons jtextpane imageicon


    【解决方案1】:

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

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

    【讨论】:

    • 顺便说一句 - JTree 似乎对 SSCCE 来说是多余的。它是否做了我错过的任何事情(除了抛出异常)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2019-05-31
    • 1970-01-01
    • 2015-01-12
    相关资源
    最近更新 更多