2011-12-30 76 views
3

在我的記事本應用程序中,我試圖通過單擊名爲PictureJMenuItem將圖像添加到JTextPane中,好像它是JLabel一樣。將圖片插入到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

「格式化代碼」只是意味着使代碼的文字看起來很可讀,有毫無關係與程序的執行或功能。請澄清你正在嘗試做什麼。 – 2011-12-30 02:12:24

+0

@HovercraftFullOfEels好吧,忘記「格式化」部分。我只是想知道如何在對話框中找到圖片並單擊「插入」後將圖像插入jtextarea。 – Rob 2011-12-30 02:15:25

+0

儘管「插入圖片到JTextArea」意味着什麼?你的意思是把它用作背景圖片嗎?或者你的意思是像JLabel或ImageIcon一樣將圖像添加到JTextArea中?問題越清楚,其他人就越容易解決。 – 2011-12-30 02:18:47

回答

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

我已根據您的建議更新了我的代碼。但是,我仍然得到一個空指針異常。當我點擊在我的對話框中插入後,我得到我的消息'「無法找到文件:」+路徑「。 – Rob 2011-12-30 13:27:09

+0

+1的幫助,我真的很感激它! – Rob 2011-12-31 02:14:21