Реализация непрерывного текстового моделирования в JEditorPane

switch (i) {
  case 1:  doOne(); break;
  case 2:  doTwo(); break;
  case 3:  doThree(); break;
  default: doNone(); break;
}

вводивший это, я должен сказать, что нет так много, неправильного с Вашим если оператор. Как сказанный Einstein: "Сделайте его максимально простым, но не более простым".

5
задан decitrig 6 October 2009 в 12:58
поделиться

5 ответов

Что вас интересует, так это набор текстового редактора java . Это руководство было отличным и помогло мне реализовать вики-редактор, похожий на вашу проблему. Комплект Swing Editor (хотите верьте, хотите нет) разработан специально для решения вашей проблемы. Я написал динамическую вики-подобную систему ссылок, используя эту технику, хотя и не без особых усилий. Вот что мне нужно было сделать:

  1. Создать документ Первая задача - создать модель документа, которая помечает шаблон, когда он идентифицирует текст. Если вы посмотрите на JavaDocument в связанном примере, есть вызов insertUpdate. В документе вы можете найти узор, который ищете, и заменить его подходящим индивидуальным стилем. По сути, вы просто создаете стиль и применяете его к документу, в котором совпадает шаблон. Альтернативой методу обновления является использование частного рабочего потока для периодического сканирования нового содержимого вики.

  2. Создание контекста рендеринга После завершения вашей модели вы можете реализовать контекст, который строит представление, подходящее для рендеринга ваш новый текст. В связанном примере они расширяют StyleContext. Это то, что используется для отображения текста в представлении. Здесь вы можете установить правила рендеринга, которые найдут ваш конкретный тег и сделают что-то вроде подчеркивания его и удаления квадратных скобок.

  3. Сделайте набор редактора Это объединит все вместе и определит тип контента для вашего документа.

] Хорошая вещь в том, чтобы сохранить документ и представление как отдельные контексты, состоит в том, что вы можете прикрепить документ к двум представлениям, одно в виде обычного текста, а другое - в новом настраиваемом контексте. Поскольку стиль по умолчанию не распознает ваш тег, он должен отображать его в виде необработанного кода вики. Новое представление преобразует представление в соответствующую ссылку.

Надеюсь, это поможет. Предостережение, этот материал, к сожалению, сложен даже для свинга. Удачи!

  • Создайте набор редактора Он объединит все вместе и определит тип содержимого для вашего документа.

  • Хорошая вещь в том, чтобы хранить документ и представление как отдельные контексты, это то, что вы можете прикрепить документ к двум представлениям, одному в виде обычного текста, а другой - в вашем новом пользовательском контексте. Поскольку стиль по умолчанию не распознает ваш тег, он должен отображать его в виде необработанного кода вики. Новое представление преобразует представление в соответствующую ссылку.

    Надеюсь, это поможет. Предостережение, этот материал, к сожалению, сложен даже для свинга. Удачи!

  • Создайте набор редактора Он объединит все вместе и определит тип содержимого для вашего документа.

  • Хорошая вещь в том, чтобы хранить документ и представление как отдельные контексты, это то, что вы можете прикрепить документ к двум представлениям, одному в виде обычного текста, а другой - в вашем новом пользовательском контексте. Поскольку стиль по умолчанию не распознает ваш тег, он должен отображать его в виде необработанного кода вики. Новое представление преобразует представление в соответствующую ссылку.

    Надеюсь, это поможет. Предостережение, этот материал, к сожалению, сложен даже для свинга. Удачи!

    Чтобы распознать ваш тег, он должен отображать его в виде необработанного кода вики. Новое представление преобразует представление в соответствующую ссылку.

    Надеюсь, это поможет. Предостережение, этот материал, к сожалению, сложен даже для свинга. Удачи!

    Чтобы распознать ваш тег, он должен отображать его в виде необработанного кода вики. Новое представление преобразует представление в соответствующую ссылку.

    Надеюсь, это поможет. Предостережение, этот материал, к сожалению, сложен даже для свинга. Удачи!

    3
    ответ дан 15 December 2019 в 01:06
    поделиться

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

    У меня нет большого опыта работы с JEditorPanes и подобными. Но я думаю, что вы можете добавить к ним ключевых слушателей, как и любой другой компонент свинга.

    В принципе, я не думаю, что существует такой компонент, поэтому вам, по сути, придется реализовать свой собственный.

    Я могу ошибаться.

    1
    ответ дан 15 December 2019 в 01:06
    поделиться

    Должно ли это происходить, когда они нажимают Enter, или только когда они отправляют данные?

    Если это отправлено, подождите, пока они нажмут кнопку, которая сохранит данные, затем выполните JEditorPane.getText (), «исправьте» текст и выполните JEditorPane.setText (text);

    Хорошо, если это должно быть на лету, попробуйте добавить прослушиватель метода ввода. InputMethodEvent должен иметь возможность вызывать «getText ()», и вы должны иметь возможность анализировать это после каждого нажатия клавиши. Если вы хотите делать это каждый раз, когда пользователь нажимает Enter, получайте текст при каждом нажатии клавиши и смотрите, находится ли текущее место в тексте на один символ после \ n или подобное.

    0
    ответ дан 15 December 2019 в 01:06
    поделиться

    Используйте RSyntaxTextArea , он делает то, что вам нужно, и вы можете добавить свой собственный лексер / правила.

    0
    ответ дан 15 December 2019 в 01:06
    поделиться

    Сначала я рекомендую использовать JTextPane , так как это больше подходит для применения стилей к тексту. Затем очень легко добавить событие keyPressed:

    jTextPane1.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyPressed(java.awt.event.KeyEvent evt) {
            jTextPane1KeyPressed(evt);
        }
    });
    
    private void jTextPane1KeyPressed(java.awt.event.KeyEvent evt) {
        // TODO add your handling code here:
        String txt = jTextPane1.getText();
    
    }
    

    Приведенный выше код был легко сгенерирован с помощью Netbeans.

    Затем вы можете применить стили, выполнив примерно следующее:

    StyledDocument doc = jTextPane1.getStyledDocument();
    Style style = jTextPane1.addStyle("Bold", null);
    StyleConstants.setBold(style, true);
    
    int pos, endpos;
    // Find pos of word to be displayed in bold
    ...
    
    // Set style
    doc.setCharacterAttributes(pos, endpos, style, true);
    
    0
    ответ дан 15 December 2019 в 01:06
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: