JTextField bez focusable ale z możliwością zaznaczenia myszką

0

W sumie jak w temacie
Potrzebuję taki komponent żeby móc myszką zaznaczyć z niego treść do skopiowania, ale jednocześnie żeby skakanie tabem po panelu omijało ten komponent.

0

Nie napisałeś czy to pole tekstowe ma być edytowalne. Jeśli tak, to wystarczy:

tf.seFocusable(false);

Jeśli nie, to musisz stworzyć własną FocusTraversalPolicy.

0

Zrobiłem, ale jakoś tak trochę naokoło chyba, póki co działa :)
Może ktoś ma jakiś lepszy pomysł ?
ps. nie wspomniałem na początku że to ma być jeszcze z maską ale to chyba bez znaczenia czy JTextField czy JFormattedTextField

            textField = new JFormattedTextField(new MaskFormatter("###-###-###"));
            textField.setText("111222333");
            textField.setEditable(false);
            textField.setFocusable(false);
            textField.addFocusListener(new FocusAdapter() {
                @Override
                public void focusLost(FocusEvent e) {
                    textField.setFocusable(false);
                    super.focusLost(e);
                }
            });
            textField.addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    textField.setFocusable(true);
                    textField.requestFocus();
                }
            });
0
bogdans napisał(a):

Nie napisałeś czy to pole tekstowe ma być edytowalne. Jeśli tak, to wystarczy:

tf.seFocusable(false);

Jeśli nie, to musisz stworzyć własną FocusTraversalPolicy.

Sorki, może nie sprecyzowałem na początku wszystkich wymagań
Pole ma być nie edytowalne, ale możliwe do zaznaczenie i skopiowania sobie przez CTRL+C

Chciałem wykorzystać FocusTraversalPolicy ale jakoś pobłądziłem :(

1

Jakoś tak:

//w konstruktorze okna:
Vector<Component> acceptable = new Vector<Component>();
acceptable.add(...);
acceptable.add(...);
...

FocusTraversalPolicy myPolicy = new AnotherFocusTraversalPolicy(acceptable);
setFocusTraversalPolicy(myPolicy);
//oraz
class AnotherFocusTraversalPolicy extends DefaultFocusTraversalPolicy
{
    Vector<Component> acceptable;
    public AnotherFocusTraversalPolicy(Vector<Component> acceptable)
    {
        this.acceptable = acceptable;
    }
    protected boolean accept(Component component)
    {
        return acceptable.contains(component);
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1