textComponent.setEditable(false);
для достижения режима «только отображение». Это работало нормально, пока я не перешел с Java 17 на Java 25.0.2. С тех пор внутри нередактируемых текстовых компонентов отображается подвижная каретка. Текст по-прежнему недоступен для редактирования, но курсор заставляет меня так думать.
Я мог бы сделать курсор невидимым, но мне пришлось бы изменить это во множестве мест. Прежде чем это сделать, я хотел получить подтверждение, что это (по какой-то непонятной мне причине) намеренное изменение поведения, а не ошибка. Мне не удалось найти официального заявления.
Изменить:
Небольшая поправка к моему первоначальному утверждению: курсор на самом деле не виден, если компонент не фокусируется. Мне нужно, чтобы он мог фокусироваться, чтобы он мог перехватывать ключевые события.
- Версия Java: JDK 25.0.2
- Версия ОС: Windows 11 (25H2)
- Внешний вид: javax.swing.plaf.metal.MetalLookAndFeel (по умолчанию)
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
public class CaretTest {
public static void main (String[] args) {
final JFrame frame = new JFrame();
frame.setTitle("Caret Test");
final JTextField textField = new JTextField();
textField.setText("why is there a caret?");
textField.setEditable(false);
final JPanel content = new JPanel(new GridLayout(1,1));
content.setBorder(new EmptyBorder(5,5,5,5));
content.setPreferredSize(new Dimension(300,40));
content.add(textField);
frame.setContentPane(content);
frame.pack();
SwingUtilities.invokeLater(() -> frame.setVisible(true));
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... tablefalse
Мобильная версия