Java Swing: пользователь набирает текст — вставляет его в середину предложения. Проблема в том, что курсор перемещается JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java Swing: пользователь набирает текст — вставляет его в середину предложения. Проблема в том, что курсор перемещается

Сообщение Anonymous »

Я знаю, что Java Swing устарел, но я все еще использую его. В основном я использую JTextArea, и он отлично работает, если пользователи хотят вставить текст в середину существующего текста. Но в JTextArea нет межстрочного интервала, а в иврите с пунктацией пунктация строк выше и ниже перекрывается. Поэтому вместо этого я использовал JTextPane и смог изменить межстрочный интервал. НО если пользователь хочет вставить текст в существующий текст, курсор после КАЖДОЙ буквы переходит в конец текста. Это делает вставку текста утомительной.
Я много гуглил, но ничего не нашел по этой теме.
Вот мой код:< /p>
hebrewField = new JTextPane();
hebrewField.setFont(ApplicationFonts.getHebrewFont(30F));
hebrewField.setDocument(new NikudStyledDocument(true));
hebrewField.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
hebrewField.setMinimumSize(new Dimension(Settings.getKeyboardWidth() - 30,
(heightTotal - heightBorderTitel)));
hebrewField.setMaximumSize(
new Dimension(this.widthTotal, (heightTotal - heightBorderTitel)));
hebrewField.setBorder(
BorderFactory.createTitledBorder(translator.realisticTranslate(
Translation.HEBRAEISCH__EINFACHE_SCHREIBWEISE)));
changeLineSpacing(hebrewField);

и
private void changeLineSpacing(JTextPane pane) {
SimpleAttributeSet set = new SimpleAttributeSet(pane.getParagraphAttributes());
StyleConstants.setLineSpacing(set, 0.5F);
pane.setParagraphAttributes(set, true);
}

Кто-нибудь еще помнит, как это сделать в Java Swing? Любые идеи приветствуются. Спасибо за вашу доброту.
Изображение

ОБНОВЛЕНИЕ
Здесь текст задан. Думаю, мне нужно установить позицию курсора после вставки текста.
public void mousePressed(MouseEvent e)
{
DataButton jButton = (DataButton) e.getComponent();
String caption = jButton.getData();

JTextComponent focusElement = findFocusElement();
if (focusElement != null)
{
int position = focusElement.getCaretPosition();
String text = focusElement.getText();
String before = text.substring(0, position);
String after = text.substring(position);
focusElement.setText(before + caption + after);
focusElement.requestFocus();
}
}

ОБНОВЛЕНИЕ
Вот минимальный воспроизводимый пример:
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;

public class Testing
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(() -> {
javax.swing.JFrame window = new JFrame();
JPanel panel = new JPanel();

JButton buttonM = new JButton("M");
JButton buttono = new JButton("o");
JButton buttont = new JButton("t");
JButton buttonh = new JButton("h");
JButton buttone = new JButton("e");
JButton buttonr = new JButton("r");
JButton buttonSpace = new JButton(" ");

JTextPane textPane = new JTextPane();
textPane.setPreferredSize(new Dimension(580,200));

addActionListener(buttonM, textPane);
addActionListener(buttono, textPane);
addActionListener(buttont, textPane);
addActionListener(buttonh, textPane);
addActionListener(buttone, textPane);
addActionListener(buttonr, textPane);
addActionListener(buttonSpace, textPane);

panel.add(textPane);
panel.add(buttonM);
panel.add(buttono);
panel.add(buttont);
panel.add(buttonh);
panel.add(buttone);
panel.add(buttonr);
panel.add(buttonSpace);

window.add(panel);
window.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
window.setSize(new Dimension(600, 400));
window.setLocationRelativeTo(null);
window.setVisible(true);
});
}

private static void addActionListener(JButton button, JTextPane textPane)
{
button.addActionListener(event -> {
String caption = button.getText();
int position = textPane.getCaretPosition();
String text = textPane.getText();
String before = text.substring(0, position);
String after = text.substring(position);
textPane.setText(before + caption + after);
textPane.requestFocus();
// textPane.setCaretPosition(position + 1); // this was missing
});
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... ce-the-pro
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»