2011-12-30 3 views
3

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


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));)? Есть ли другой, который должен написать мой код, чтобы выполнить это правильно?

+0

«Форматирование кода» просто означает, что делает текст код выглядеть красиво и читаемым и не имеет ничего общего с выполнением программы или функции. Просьба уточнить, что вы пытаетесь сделать. –

+0

@HovercraftFullOfEels Хорошо, забудьте о части «форматирования». Мне просто интересно, как вставить изображение в jtextarea после поиска изображения в диалоговом окне и нажатия «Вставить». – Rob

+0

Что вы подразумеваете под «вставкой изображения в JTextArea»? Вы хотите использовать его в качестве фонового изображения? Или вы хотите добавить изображение, как если бы это был JLabel или ImageIcon в JTextArea? Чем яснее ваша проблема, тем легче решать другие проблемы. –

ответ

1

После долгих исследований я, наконец, понял это! Особая благодарность this post, а также сообщение от 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); 
     } 
    } 
} 
4

Вы можете добавлять компоненты или иконки в текстовой панели:

textpane.insertIcon(...); 
textPane.insertComponent(...); 
+0

Я обновил свой код в соответствии с вашим предложением. Однако я все еще получаю исключение Null Pointer. После того, как я нажму «Вставить» в своем диалоговом окне, я получаю сообщение «Не могу найти файл:« + путь ». – Rob

+0

+1 за помощь, я действительно ценю это! – Rob

Смежные вопросы