Опять клваиатура...
От: Аноним  
Дата: 23.03.04 10:38
Оценка:
хочу что бы печатались русские буквы в TextArea когда она не в фокусе
вот написал программу все прекрасно работает (не без помощи rsdn)

но есть одна неприятность
когда я хочу скопировать из TextArea что-то
она попадает в фокус и буквы перестают печататься

почему ?


import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test extends JFrame {
    JTextArea jt1 = new JTextArea(10, 15);
    JScrollPane jsp = new JScrollPane(jt1);
    JPanel jp = new JPanel();
    public Test() {
        jt1.setEditable(false);
        jp.add(jsp);
        getContentPane().add(jp);
        getContentPane().setFocusable(true);
    }
    protected JRootPane createRootPane() {
        JRootPane rootPane = new JRootPane();
        for (char ch = 'а'; ch <= 'я'; ch++) {
            final char c = ch;
            rootPane.registerKeyboardAction(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    jt1.append("" +c);
                }
            }, KeyStroke.getKeyStroke(ch), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
        }
        return rootPane;
    }
    public static void main(String[] args) {
        Test frame = new Test();
        frame.setBounds(200, 200, 200, 300);
        frame.show();
    }
}



P.S я наверно уже всех достал...
Re: Опять клваиатура...
От: Blazkowicz Россия  
Дата: 23.03.04 10:47
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>хочу что бы печатались русские буквы в TextArea когда она не в фокусе

А>вот написал программу все прекрасно работает (не без помощи rsdn)

А>но есть одна неприятность

А>когда я хочу скопировать из TextArea что-то
А>она попадает в фокус и буквы перестают печататься

А>почему ?


Скорее всего потому что у тебя печать замаплена на ContentPane, а если фокус TextArea, то соответсвенно в ContentPane его нет. Одного не пояму. Для чего ты так извращаешься. Вот например, ты не задумывался над тем, что у тебя на каждый символ создаётся по одному объекту (ActionListsner)?

А>P.S я наверно уже всех достал...


Да все бы ничего, но ты хотя бы зарегестрировался...
Re[2]: Опять клваиатура...
От: Аноним  
Дата: 23.03.04 11:00
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


А>>хочу что бы печатались русские буквы в TextArea когда она не в фокусе

А>>вот написал программу все прекрасно работает (не без помощи rsdn)

А>>но есть одна неприятность

А>>когда я хочу скопировать из TextArea что-то
А>>она попадает в фокус и буквы перестают печататься

А>>почему ?


B>Скорее всего потому что у тебя печать замаплена на ContentPane, а если фокус TextArea, то соответсвенно в ContentPane его нет. Одного не пояму. Для чего ты так извращаешься. Вот например, ты не задумывался над тем, что у тебя на каждый символ создаётся по одному объекту (ActionListsner)?



Но если замапить на TextArea все равно не работает я пробовал
Насчет ActionListsner это точно но я подркгому пока незнаю как сделать ...

сегодня же зарегистрюсь
Re[2]: Опять клваиатура...
От: Аноним  
Дата: 23.03.04 11:06
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>для чего ты так извращаешься. )?



вот такая задача представьте что у вас два поля для ввода слева и справа
печатать надо только влевое всегда куда бы фокус не попал а также надо
копировать информацию мышкой из правого поля
если его сделать UnFocusable то все прекрасно и замечательно но копирование мышкой всеми любимое пропадает вот и приходиться что-то придумывать ....
Re[3]: Опять клваиатура...
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 23.03.04 11:07
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Blazkowicz, Вы писали:


B>>Здравствуйте, Аноним, Вы писали:


А>>>хочу что бы печатались русские буквы в TextArea когда она не в фокусе

А>>>вот написал программу все прекрасно работает (не без помощи rsdn)

А>>>но есть одна неприятность

А>>>когда я хочу скопировать из TextArea что-то
А>>>она попадает в фокус и буквы перестают печататься

А>>>почему ?


B>>Скорее всего потому что у тебя печать замаплена на ContentPane, а если фокус TextArea, то соответсвенно в ContentPane его нет. Одного не пояму. Для чего ты так извращаешься. Вот например, ты не задумывался над тем, что у тебя на каждый символ создаётся по одному объекту (ActionListsner)?



А>Но если замапить на TextArea все равно не работает я пробовал

А>Насчет ActionListsner это точно но я подркгому пока незнаю как сделать ...

А>сегодня же зарегистрюсь


твоей версии если добавить
         jt1.setFocusable(false);

то все заработает.
ICQ# 333355130
Re[4]: Опять клваиатура...
От: Аноним  
Дата: 23.03.04 11:10
Оценка:
Здравствуйте, Lucker, Вы писали:

L>Здравствуйте, <Аноним>, Вы писали:


А>>Здравствуйте, Blazkowicz, Вы писали:


B>>>Здравствуйте, Аноним, Вы писали:


А>>>>хочу что бы печатались русские буквы в TextArea когда она не в фокусе

А>>>>вот написал программу все прекрасно работает (не без помощи rsdn)

А>>>>но есть одна неприятность

А>>>>когда я хочу скопировать из TextArea что-то
А>>>>она попадает в фокус и буквы перестают печататься

А>>>>почему ?


B>>>Скорее всего потому что у тебя печать замаплена на ContentPane, а если фокус TextArea, то соответсвенно в ContentPane его нет. Одного не пояму. Для чего ты так извращаешься. Вот например, ты не задумывался над тем, что у тебя на каждый символ создаётся по одному объекту (ActionListsner)?



А>>Но если замапить на TextArea все равно не работает я пробовал

А>>Насчет ActionListsner это точно но я подркгому пока незнаю как сделать ...

А>>сегодня же зарегистрюсь


L> твоей версии если добавить

L>
L>         jt1.setFocusable(false);
L>

L>то все заработает.


Это 100% но тогда нельзя будет скопировать информацию с TextArea
Re[5]: Опять клваиатура...
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 23.03.04 11:44
Оценка: 3 (1)
А>Это 100% но тогда нельзя будет скопировать информацию с TextArea
/*
 * $Id$
 * User: lucker
 * Created: 23.03.2004 12:45:26
 */

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestRusKeys extends JFrame {
    private JTextArea jt1;

    JScrollPane jsp;
    JPanel jp;

    public TestRusKeys() {
        jt1 = new JTextArea(10, 15);
        jt1.setEditable(false);

        setRootPane(createMyRootPane());
        jp = new JPanel();
        jp.add(new JScrollPane(jt1));
        getContentPane().add(jp);
        getContentPane().setFocusable(true);
    }

    private JRootPane createMyRootPane() {
        JRootPane rootPane = new JRootPane();
        for (char ch = 'а'; ch <= 'я'; ch++) {
            final char c = ch;
            ActionListener actionListener = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    jt1.append("" +c);
                }
            } ;

            rootPane.registerKeyboardAction(actionListener, KeyStroke.getKeyStroke(ch), JComponent.WHEN_IN_FOCUSED_WINDOW);
            jt1.registerKeyboardAction(actionListener, KeyStroke.getKeyStroke(ch), JComponent.WHEN_FOCUSED);
        }
        return rootPane;
    }
    public static void main(String[] args) {
        TestRusKeys frame = new TestRusKeys();
        frame.setBounds(200, 200, 200, 300);
        frame.show();
    }

}



Но все это не правильно, как-то...
ICQ# 333355130
Re[6]: Опять клваиатура...
От: Unquoted  
Дата: 23.03.04 11:58
Оценка:
Здравствуйте, Lucker, Вы писали:

А>>Это 100% но тогда нельзя будет скопировать информацию с TextArea

L>
L>/*
L> * $Id$
L> * User: lucker
L> * Created: 23.03.2004 12:45:26
L> */

L>import javax.swing.*;
L>import java.awt.event.ActionEvent;
L>import java.awt.event.ActionListener;

L>public class TestRusKeys extends JFrame {
L>    private JTextArea jt1;

L>    JScrollPane jsp;
L>    JPanel jp;

L>    public TestRusKeys() {
L>        jt1 = new JTextArea(10, 15);
L>        jt1.setEditable(false);

L>        setRootPane(createMyRootPane());
L>        jp = new JPanel();
L>        jp.add(new JScrollPane(jt1));
L>        getContentPane().add(jp);
L>        getContentPane().setFocusable(true);
L>    }

L>    private JRootPane createMyRootPane() {
L>        JRootPane rootPane = new JRootPane();
L>        for (char ch = 'а'; ch <= 'я'; ch++) {
L>            final char c = ch;
L>            ActionListener actionListener = new ActionListener() {
L>                public void actionPerformed(ActionEvent e) {
L>                    jt1.append("" +c);
L>                }
L>            } ;

L>            rootPane.registerKeyboardAction(actionListener, KeyStroke.getKeyStroke(ch), JComponent.WHEN_IN_FOCUSED_WINDOW);
L>            jt1.registerKeyboardAction(actionListener, KeyStroke.getKeyStroke(ch), JComponent.WHEN_FOCUSED);
L>        }
L>        return rootPane;
L>    }
L>    public static void main(String[] args) {
L>        TestRusKeys frame = new TestRusKeys();
L>        frame.setBounds(200, 200, 200, 300);
L>        frame.show();
L>    }

L>}
L>



L>Но все это не правильно, как-то...


Огромное спасибо !

P.S я зарегистрился
Re[3]: Опять клваиатура...
От: Blazkowicz Россия  
Дата: 23.03.04 12:05
Оценка:
Здравствуйте, Аноним, Вы писали:

B>>для чего ты так извращаешься. )?


А>вот такая задача представьте что у вас два поля для ввода слева и справа

А>печатать надо только влевое всегда куда бы фокус не попал а также надо
А>копировать информацию мышкой из правого поля
А>если его сделать UnFocusable то все прекрасно и замечательно но копирование мышкой всеми любимое пропадает вот и приходиться что-то придумывать ....

Если бы дело ограничивалось двумя TextArea, то множно было бы редиректить события из одного в другое... но с большим количеством разных компонент много кода получается.
Re[4]: Опять клваиатура...
От: Unquoted  
Дата: 23.03.04 12:11
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


B>>>для чего ты так извращаешься. )?


А>>вот такая задача представьте что у вас два поля для ввода слева и справа

А>>печатать надо только влевое всегда куда бы фокус не попал а также надо
А>>копировать информацию мышкой из правого поля
А>>если его сделать UnFocusable то все прекрасно и замечательно но копирование мышкой всеми любимое пропадает вот и приходиться что-то придумывать ....

B>Если бы дело ограничивалось двумя TextArea, то множно было бы редиректить события из одного в другое... но с большим количеством разных компонент много кода получается.



компонент довольно много нагромождены целая куча
и к сожалению не мной писаных я просто добавляю некоторую функциональность ....
Re[5]: Опять клваиатура...
От: Blazkowicz Россия  
Дата: 23.03.04 12:22
Оценка:
Здравствуйте, Unquoted:

Вот как можно сдыхаться всех этих слушателей:

        rootPane.setContentPane(new JPanel()
        {
            protected void processKeyEvent(KeyEvent e)
            {
                //сюда добавить фильтрацию если нужно
                jt1.append("" +e.getKeyChar());
            }
        });
Re[6]: Опять клваиатура...
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 23.03.04 12:37
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Unquoted:


B>Вот как можно сдыхаться всех этих слушателей:


B>
B>        rootPane.setContentPane(new JPanel()
B>        {
B>            protected void processKeyEvent(KeyEvent e)
B>            {
B>                //сюда добавить фильтрацию если нужно
B>                jt1.append("" +e.getKeyChar());
B>            }
B>        });
B>


тока наверное лучше использовать processComponentKeyEvent(KeyEvent e)
ICQ# 333355130
Re[4]: Опять клваиатура...
От: Alekseymir Украина  
Дата: 23.03.04 12:43
Оценка:
B>Если бы дело ограничивалось двумя TextArea,
>>то множно было бы редиректить события из одного в другое...
а это как если не секрет?
Re[5]: Опять клваиатура...
От: Blazkowicz Россия  
Дата: 23.03.04 12:44
Оценка:
Здравствуйте, Alekseymir, Вы писали:

Берешь одну компоненту. Перехватываешь собатия и вызываешь обработку этого события у другой компоненты.
Re[7]: Опять клваиатура...
От: Alekseymir Украина  
Дата: 24.03.04 08:08
Оценка:
Здравствуйте, Lucker, Вы писали:

L>Здравствуйте, Blazkowicz, Вы писали:


B>>Здравствуйте, Unquoted:


B>>Вот как можно сдыхаться всех этих слушателей:


B>>
B>>        rootPane.setContentPane(new JPanel()
B>>        {
B>>            protected void processKeyEvent(KeyEvent e)
B>>            {
B>>                //сюда добавить фильтрацию если нужно
B>>                jt1.append("" +e.getKeyChar());
B>>            }
B>>        });
B>>


L>тока наверное лучше использовать processComponentKeyEvent(KeyEvent e)


а как это можно заставить работать? чет у меня нифига не работает, JDK1.4.1 WinXP? мона больший участок кода?
правда на JDK1.3.1 processS=KeyEvent отрабатывает....
Re[8]: Опять клваиатура...
От: Blazkowicz Россия  
Дата: 24.03.04 08:44
Оценка:
Здравствуйте, Alekseymir, Вы писали:

A>а как это можно заставить работать? чет у меня нифига не работает, JDK1.4.1 WinXP? мона больший участок кода?

A>правда на JDK1.3.1 processS=KeyEvent отрабатывает....


import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

public class Test extends JFrame {
    private JTextArea jt1;

    JScrollPane jsp;
    JPanel jp;

    public Test() {
        jt1 = new JTextArea(10, 15);
        jt1.setEditable(false);
        jt1.setFocusable(false);
        setRootPane(createMyRootPane());
        jp = new JPanel();
        jp.add(new JScrollPane(jt1));
        jp.setFocusable(false);
        getContentPane().add(jp);
        getContentPane().setFocusable(true);
    }

    private JRootPane createMyRootPane() {
        JRootPane rootPane = new JRootPane();
        rootPane.setContentPane(new JPanel()
        {
            protected void processComponentKeyEvent(KeyEvent e)
            {
                if(e.getID() == KeyEvent.KEY_TYPED)
                jt1.append("" +e.getKeyChar());
            }
        });
        return rootPane;
    }
    public static void main(String[] args) {
        Test frame = new Test();

        frame.setBounds(200, 200, 200, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.show();
    }

}


Только это всё такое уродство...
Re[9]: Опять клваиатура...
От: Alekseymir Украина  
Дата: 24.03.04 08:59
Оценка:
Thanks a lot...
правда под ХР все равно чет пока не работает, буду разбираться, интересно..... , зато под 2К все ок
Re[10]: Опять клваиатура...
От: Blazkowicz Россия  
Дата: 24.03.04 09:01
Оценка:
Здравствуйте, Alekseymir, Вы писали:

A>Thanks a lot...

A>правда под ХР все равно чет пока не работает, буду разбираться, интересно..... , зато под 2К все ок
У меня тоже ХР и 1.4.1.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.