Можно ли вставить выбранное пользователем изображение непосредственно в JEditorPane?

То, что я пытаюсь сделать, это открыть JFilechooser, который фильтрует изображения jpeg, gif и png, затем получает выбор пользователя и вставляет его в JEditorPane. Можно ли это сделать? или я пытаюсь что-то невозможное? Вот пример моей программы (insert — это JMenuItem, а mainText — это JEditorPane).

insert.addActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e){
    JFileChooser imageChooser = new JFileChooser();
      imageChooser.setFileFilter(new FileNameExtensionFilter("Image Format","jpg","jpeg","gif","png"));
                int choice = imageChooser.showOpenDialog(mainText);
                if (choice == JFileChooser.APPROVE_OPTION) {
                mainText.add(imageChooser.getSelectedFile());
                }
        }
    });

То, что я пытался сделать, это использовать метод добавления, я знаю, что это неправильно, но просто чтобы дать вам представление о том, что я пытаюсь сделать. Прежде чем жаловаться, извините за форматирование кода, я действительно не знаю всех соглашений о том, что считается хорошим или плохим стилем. Большое спасибо.

Это часть кода, который я использую для сохранения файла html.

else if (e.getSource() == save) {
        JFileChooser saver = new JFileChooser();
        saver.setFileFilter(new FileNameExtensionFilter(".html (webpage format)" , "html"));
        int option = saver.showSaveDialog(this);
        if (option == JFileChooser.APPROVE_OPTION) {
            try {
                BufferedWriter out = new BufferedWriter(new FileWriter(saver.getSelectedFile().getPath()));
                out.write(mainText.getText());
                out.close();
            } catch (Exception exception) {
                System.out.println(exception.getMessage());
            }
        }
    }

person Jaime Borondo    schedule 01.06.2010    source источник


Ответы (2)


Проще просто использовать JTextPane. Затем вы можете использовать insertIcon(...) в любом месте текста.

Редактировать:

Мне никогда не удавалось манипулировать HTML, но раньше я использовал следующий код:

HTMLEditorKit editorKit = (HTMLEditorKit)textPane.getEditorKit();
text = "<a href=\"abc\">hyperlink</a>";
editorKit.insertHTML(doc, textPane.getCaretPosition(), text, 0, 0, HTML.Tag.A);

Таким образом, предположительно код будет аналогичен для тега IMG.

person camickr    schedule 01.06.2010
comment
спасибо, ЭТО было то, что я искал, я как-то предполагал, что JEditorPane и JTextPane будут иметь одинаковые методы, так как они действительно похожи. благодарю вас - person Jaime Borondo; 02.06.2010
comment
да, но возможно ли, что когда я сохраню файл в формате html, я смогу открыть его в своем браузере, и изображение будет отображаться таким образом? потому что это моя единственная забота сейчас. - person Jaime Borondo; 02.06.2010
comment
Два компонента используются для разных целей. Если вам нужен текст в формате HTML, то это не сработает. См. мое редактирование выше. - person camickr; 02.06.2010

Это должно сделать это:

mainText.setContentType("text/html");
String image = String.format("<img src=\"%s\">", imageChooser.getSelectedFile());
mainText.setText(image);
person jonescb    schedule 01.06.2010
comment
Большое вам спасибо, я несколько дней находился в ситуации проб и ошибок, пока не решил обратиться за помощью сюда, спасибо. - person Jaime Borondo; 01.06.2010
comment
а что, если я захочу добавить его в конец уже написанного текста? Я имею в виду, я не могу использовать setText(mainText.getText() + изображение); потому что это поместило бы его за пределы тегов тела, что я мог сделать в этом случае? - person Jaime Borondo; 01.06.2010
comment
@JIM, я бы сделал String text = mainText.getText(), а затем с помощью метода String substring() обрезал последние 7 символов (‹/body›). Затем добавьте свой ‹img› и добавьте новый ‹/body›. Вызов подстроки может выглядеть так: text = text.substring(0, text.length() - 7); - person jonescb; 02.06.2010