Использование пользовательского Caret в JTextField для доступности

Я программирую приложение Swing, и у меня есть друг, который много читал Библию. Это приложение имеет поиск по тексту или отрывку.

Но мой друг видит только большие размеры шрифта и контрастные цвета. Я меняю цвет каретки для textField на setCaretColor, где пользователь вводит текст для поиска.

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

Есть ли способ изменить ширину каретки, чтобы показать больше?


person Paul Vargas    schedule 25.04.2012    source источник
comment
Почему бы не использовать функцию увеличения хост-платформы?   -  person trashgod    schedule 25.04.2012
comment
LookAndFeel, кажется, не реагирует на изменения темы Windows...   -  person Paul Vargas    schedule 25.04.2012
comment
Это не та тема, на которую ссылался @trashgod, это панель управления (Windows 7) | Внешний вид и персонализация | .. Дисплей или .. Центр специальных возможностей / Сделайте компьютер более удобным для просмотра / Включите лупу.   -  person Andrew Thompson    schedule 26.04.2012
comment
В Mac OS X он находится в System Preferences > Universal Access > Zoom.   -  person trashgod    schedule 26.04.2012


Ответы (3)


Вы видели этот пример из книги Oreilly Swing, которая гуляет по всему Интернету? Кажется, вы можете настроить курсор много.

http://www.java2s.com/Code/Java/Swing-JFC/Fanciercustomcaretclass.htm

person Jim    schedule 25.04.2012
comment
Этот пример хорош, но мне нужно другое. Я видел в Microsoft Word одну вещь. Если у вас маленький размер шрифта, у вас есть курсор с такой же высотой шрифта. Ширина курсора не меняется при изменении размера шрифта, только высота - person Paul Vargas; 26.04.2012

может быть, есть три способа, как я могу воспроизвести Caret и выделение в th JTextComponents

import java.awt.Color;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.DefaultCaret;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;

public class TextFieldExample extends JFrame {

    private static final long serialVersionUID = 1L;

    public TextFieldExample() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        JPanel panel = new JPanel();
        JTextField tfield = new JTextField(10);
        tfield.setText("default text");
        final JTextField tfield2 = new JTextField(10);
        tfield2.setText("default text");
        tfield2.addFocusListener(new FocusListener() {

            public void focusGained(FocusEvent fe) {
                tfield2.setCaretPosition(tfield2.getDocument().getLength());
            }

            public void focusLost(FocusEvent fe) {
            }
        });
        JTextField tfield3 = new JTextField(10);
        tfield3.setText("default text");
        tfield3.setCaret(new HighlightCaret());
        panel.add(tfield);
        panel.add(tfield2);
        panel.add(tfield3);
        add(panel);
        pack();
        setVisible(true);
    }

    class HighlightCaret extends DefaultCaret {

        private final Highlighter.HighlightPainter unfocusedPainter =
                new DefaultHighlighter.DefaultHighlightPainter(new Color(230, 230, 210));
        private static final long serialVersionUID = 1L;
        private boolean isFocused;

        @Override
        protected Highlighter.HighlightPainter getSelectionPainter() {
            return isFocused ? super.getSelectionPainter() : unfocusedPainter;
        }

        @Override
        public void setSelectionVisible(boolean hasFocus) {
            if (hasFocus != isFocused) {
                isFocused = hasFocus;
                super.setSelectionVisible(false);
                super.setSelectionVisible(true);
            }
        }
    }

    public static void main(String... args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                TextFieldExample textFieldExample = new TextFieldExample();
            }
        });
    }
}
person mKorbel    schedule 25.04.2012
comment
Я тестирую этот код и вижу, что ширина каретки rentangle кажется одинаковой во всех текстовых полях. - person Paul Vargas; 26.04.2012

Возможно, это поможет http://java-sl.com/tip_overwrite_mode.html

person StanislavL    schedule 25.04.2012