Вставьте картинку в JTextPane - PullRequest
       28

Вставьте картинку в JTextPane

3 голосов
/ 30 декабря 2011

В моем приложении блокнота я пытаюсь добавить изображение, как если бы оно было JLabel в JTextPane, нажав JMenuItem с именем Picture.


private class Picture implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
        fc = new JFileChooser();
        FileNameExtensionFilter picture = new FileNameExtensionFilter("JPEG files (*.jpg)", "jpg");
        fc.setFileFilter(picture);
        fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

        if (fc.showDialog(Notepad.this, "Insert")!=JFileChooser.APPROVE_OPTION)  return;
        filename = fc.getSelectedFile().getAbsolutePath();

        // If no text is entered for the file name, refresh the dialog box
        if (filename==null) return;

        // NullPointerException
        textArea.insertIcon(createImageIcon(filename));
    }

    protected ImageIcon createImageIcon(String path) 
    {
        java.net.URL imgURL = Notepad.class.getResource(path);

        if (imgURL != null) 
        {
            return new ImageIcon(imgURL);
        } 

        else 
        {
            JOptionPane.showMessageDialog(frame, "Could not find file: " + path);
            return null;
        }
    }
}

Проблема заключается в строке 20, где есть NullPointerException, и я уже знаю, почему это происходит, но ... Как мне написать эту строку кода, чтобы я мог сделать что-то похожее на textPane.add(image) (так как я могуне так ли textPane.add(StyleConstants.setIcon(def, createImageIcon(filename));)?Есть ли другой код, который я должен написать для правильного выполнения?

Ответы [ 2 ]

4 голосов
/ 30 декабря 2011

Вы можете добавить компоненты или значки в текстовую панель:

textpane.insertIcon(...);
textPane.insertComponent(...);
1 голос
/ 31 декабря 2011

После долгих исследований я наконец понял это! Особая благодарность этому сообщению , а также сообщению camickr.


private class Picture implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
        fc = new JFileChooser();
        FileNameExtensionFilter picture = new FileNameExtensionFilter("JPEG files (*.png)", "png");
        fc.setFileFilter(picture);
        fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

        if (fc.showDialog(Notepad.this, "Insert")!=JFileChooser.APPROVE_OPTION)  return;
        filename = fc.getSelectedFile().getAbsolutePath();

        // If no text is entered for the file name, refresh the dialog box
        if (filename==null) return;

        try 
        {
            BufferedImage img = ImageIO.read(new File(filename));
            ImageIcon pictureImage = new ImageIcon(img);
            textArea.insertIcon(pictureImage);
        } 

        catch (IOException e) 
        {
            JOptionPane.showMessageDialog(frame, "Could not find file: " + filename);
        }
    }
}
...