Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выделение содержимого ячейки jTable 
:(
    Опции темы
Swatch
Дата 14.9.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



Добрый день.

Поделитесь советом, как сделать так, чтобы при выделении ячейки в таблице, ее содержимое (текст, цифры, даты) выделялось цветом?
Ячейка редактируема по одному клику. надо, чтобы как только ее выбирали, то, если в ней есть текст, чтобы он выделялся цветом. Не сама ячейка, а именно текст. smile  smile 
PM MAIL   Вверх
powerOn
Дата 14.9.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



попробуй для начала setSelectionForeground, если не то, то нужно свой рендерер писать


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Swatch
Дата 14.9.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



придется рендерер писать:( потому что setSelectionForeground уже попробовалаsmile не помогло smile

Добавлено через 45 секунд
а как в рендерере указать, чтобы текст выделился, не подскажите?
PM MAIL   Вверх
Swatch
Дата 14.9.2007, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



Написала вот так:
Код

public class MyTableCellRenderer extends JTextField implements TableCellRenderer{
    
    protected Color background;
    protected Color foreground;
    
    /** Creates a new instance of MyTableCellRenderer */
    public MyTableCellRenderer() {
    }
    
    public Component getTableCellRendererComponent(JTable table, Object value,
                        boolean isSelected, boolean hasFocus, 
                        int row, int column){
            background = new java.awt.Color(255,255,255);
            foreground = new java.awt.Color(0, 0, 0);           
        
            JTextField tf = new JTextField(value.toString());
            tf.setBackground(background);
            tf.setForeground(foreground);
            table.setCellSelectionEnabled(true);
            tf.setEditable(true);
            tf.setFont(new java.awt.Font("Arial", 0, 12));
            tf.setBackground(background);
            tf.setSelectionStart(0);
            tf.setSelectionEnd(tf.getText().length());
            tf.setSelectedTextColor(Color.BLACK);
            return tf;
        
    }
}


На jTableMousePressed написала:
Код

jTable1.getColumnModel().getColumn(0).setCellRenderer(new MyTableCellRenderer());


Но текст почему-то не выделяется:( 

В чем млжет быть проблема??? smile 
PM MAIL   Вверх
powerOn
Дата 14.9.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Ой, мне кажется что я вас обманул.  smile 
Если текст должен быть подсвечен при редактировании, значит нужен Editor, а не Renderer...


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
powerOn
Дата 14.9.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Вот что получилось в простейшем случае:

Код

public class NewJFrame extends javax.swing.JFrame
{
    public NewJFrame()
    {
        initComponents();
        
        JTextField jtf = new JTextField();
        jtf.setForeground(Color.RED);

        jTable1.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(jtf));
    }
                          
    private void initComponents()
    {
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][]
            {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String []
            {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

        pack();
    }                        
    

    public static void main(String args[])
    {
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                new NewJFrame().setVisible(true);
            }
        });
    }
                   
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
}



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Swatch
Дата 14.9.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



А можно пример Editor-а?

Оставила то же самое, только TableCellRenderer исправила на TableCellEditor. Вы дает ошибку, что 
MyTableCellEditor.java:25: classes.MyTableCellEditor is not abstract and does not override abstract method removeCellEditorListener(javax.swing.event.CellEditorListener) in javax.swing.CellEditor
:(

В чем тут дело?

И потом, как устанавливать Editor и когда? 
Подойдет на jTableMouse Click? Вот так можно:?
Код

        int i = jTable1.getEditingRow();
        int j = jTable1.getEditingColumn();
        if (jTable1.getModel().isCellEditable(i,j) == true){
            jTable1.setCellEditor(new MyTableCellEditor());
        }


Добавлено через 9 минут и 54 секунды
То, что вы написали, работает. Только мне нужно, чтобы не текст изменял цвет, а чтобы то, что в ячейке, выделялось (как когда выделяют текст, чтобы удалить). Я написала вот так:
Код

       JTextField jtf = new JTextField();
        jtf.setSelectionStart(0);
        jtf.setSelectionEnd(jtf.getText().length());
        jtf.setSelectedTextColor(Color.BLACK);
        jtf.setEditable(true);
        
        jTable1.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(jtf));
        for (int row=0; row<jTable1.getRowCount(); row++){
            DefaultCellEditor editor = (DefaultCellEditor)jTable1.getCellEditor(row,0);    
            editor.setClickCountToStart(1);
        } 


Но этот код не работает. :( как-нибудь можно заставить его работать???
PM MAIL   Вверх
powerOn
Дата 14.9.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



А если так попробовать?
Код

        JTextField jtf = new JTextField();
        
        jtf.addFocusListener(new FocusAdapter()
        {
            public void focusGained(FocusEvent e)
            {
                JTextField jtf = (JTextField) e.getSource();
                
                jtf.setSelectionStart(0);
                jtf.setSelectionEnd(jtf.getText().length());
            }
        });
        

        jTable1.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(jtf));



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Swatch
Дата 14.9.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



да, это помогло.

Только теперь появилась проблема. в первый столбец можно записывать только Double. если пытаться вписать туда что-то другое и потом покинуть ячейку, то программа падает с ошибкой:
java.lang.IllegalArgumentException: Cannot format given Object as a Number. 

как сделать так, чтобы введенный неправильный текст выделялся, фокус оставался на этой ячейке? как вообще проверить эту ошибку?
сейчас фокус переходит той ячейке, на которую нажали, независимо от того, упала ошибка или нет...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.