Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > JTable - установка фокуса на определенную ячейку


Автор: coderinside 19.3.2007, 23:41
Здравствуйте! Подскажите как программно установить фокус на определенную ячейку в JTable и перевести ее в режим редактирования (чтобы в ней появился курсор). Все это делается потому что некоторые не могут два раза удачно щелкнуть по ячейке или не знают что для ее редактирования нужно  нажать F2... 
Работать будет так: пользователь выбирает нужную ему ячейку, жмет на тулбаре кнопку "Редактировать ячейку", в ячейке появляется курсор и пользователь вводит текст smile
P.S. Я так понимаю нужно смотреть на table.editCellAt(row, column). После этого ячейка как бы входит в режим редактирования, но курсор не появляется и все равно нужно жать F2 :(

Автор: LSD 19.3.2007, 23:50
1. Попытайся вызвать table.requestFocusInWindow()
2. Может будет проще:
Код
((DefaultCellEditor) table.getCellEditor()).setClickCountToStart(1);

?

Автор: cube 29.4.2008, 10:37
у меня тоже вопрос

у меня есть таблица, первую ячейку которой я должен скрывать. Делаю я это так:

Код

      findTableColumn(0).setMinWidth(0);
      findTableColumn(0).setMaxWidth(0);
      findTableColumn(0).setPreferredWidth(0);


теперь когда я нажимаю TAB я попадаю фокусом на эту ячейку, как сделать так, чтобы я "перескакивал" ее?

я добавил KeyListener на мою таблицу и отслеживаю его нажатие, но установить фокус на другую ячейку я незнаю как...

Автор: dorogoyIV 29.4.2008, 11:33
coderinside, 
Код

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

public class MyTable extends JFrame
                     implements ActionListener
{
 JTable table = new JTable(6, 10);
 JButton edit = new JButton("Edit");

 public MyTable()
 {
  add(new JScrollPane(table));

  JToolBar jtb = new JToolBar();
  jtb.add(edit);
  add(jtb, "North");
  edit.setFocusable(false); // это важно !!!
  edit.addActionListener(this);
 }

 public void actionPerformed(ActionEvent e)
 {
  try
  {
   Robot r = new Robot();
   r.keyPress(KeyEvent.VK_F2);
  }
  catch(Exception ex){/**/}
 }

 public static void main(String [] args)
 {
  JFrame f = new MyTable();
  f.setBounds(100, 100, 400, 300);
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}

только вот если тулбар со своего места вытащить - перестает работать. думаю это можно исправить, забирая у тулбара фокус, попробуй  smile 

Автор: math64 29.4.2008, 11:52
cube: Убери колонку из TableColumnModel:
Код

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;

public class TableTest3 {
  public static void main (String[] args) {
    String[][] data = {{"1","2","3"},{"4","5","6"},{"7","8","9"}};
    String[] cols = {"A", "B","C"};
    JFrame frame = new JFrame("TableTest");
    DefaultTableModel dm = new DefaultTableModel(data, cols);
    JTable table = new JTable(dm, null, null);
    TableColumnModel cm = table.getTableHeader ().getColumnModel ();
    cm.removeColumn (cm.getColumn (0));
    frame.add (new JScrollPane(table));
    frame.pack ();
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    frame.setVisible (true);
  }
}


Автор: dorogoyIV 29.4.2008, 11:57
coderinside, добавь после 23 строки
Код

table.grabFocus();

Автор: cube 29.4.2008, 13:39
Цитата(math64 @ 29.4.2008,  11:52)
cube: Убери колонку из TableColumnModel:

нет немогу, у меня две связанные таблицы, я немогу ее убрать, если бы можно было применить setVisible(false) к колонке таблицы, я бы так сделал, но удалить немогу! Мне просто фокусом туда пускать нельзя... вот и все что мне нужжно!

Автор: math64 5.5.2008, 10:37
Вот две связанные таблицы с одной моделью и разными колонками:
Код

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;

public class TableTest {
  public static void main (String[] args) {
    String[][] data = {{"1","2","3"},{"4","5","6"},{"7","8","9"}};
    String[] cols = {"A", "B","C"};
    JFrame frame = new JFrame("TableTest");
    DefaultTableModel dm = new DefaultTableModel(/*data,*/ cols, 10);
    JTable table = new JTable(dm);
    TableColumnModel cm = table.getTableHeader ().getColumnModel ();
    cm.removeColumn (cm.getColumn (0));
    JScrollPane scroll = new JScrollPane(table);
    JTable table2 = new JTable(dm);
    table2.setPreferredScrollableViewportSize (new Dimension(100,0));
    table2.setSelectionModel (table.getSelectionModel ());
    TableColumnModel cm2 = table2.getTableHeader ().getColumnModel ();
    cm2.removeColumn (cm2.getColumn (2));
    cm2.removeColumn (cm2.getColumn (1));
    scroll.setRowHeaderView (table2);
    scroll.setCorner (ScrollPaneConstants.UPPER_LEFT_CORNER,table2.getTableHeader ());
    frame.add (scroll);
    frame.pack ();
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    frame.setVisible (true);
  }
}


Автор: cube 5.5.2008, 10:49
Цитата(math64 @ 5.5.2008,  10:37)
Вот две связанные таблицы с одной моделью и разными колонками:
Код

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;

public class TableTest {
  public static void main (String[] args) {
    String[][] data = {{"1","2","3"},{"4","5","6"},{"7","8","9"}};
    String[] cols = {"A", "B","C"};
    JFrame frame = new JFrame("TableTest");
    DefaultTableModel dm = new DefaultTableModel(/*data,*/ cols, 10);
    JTable table = new JTable(dm);
    TableColumnModel cm = table.getTableHeader ().getColumnModel ();
    cm.removeColumn (cm.getColumn (0));
    JScrollPane scroll = new JScrollPane(table);
    JTable table2 = new JTable(dm);
    table2.setPreferredScrollableViewportSize (new Dimension(100,0));
    table2.setSelectionModel (table.getSelectionModel ());
    TableColumnModel cm2 = table2.getTableHeader ().getColumnModel ();
    cm2.removeColumn (cm2.getColumn (2));
    cm2.removeColumn (cm2.getColumn (1));
    scroll.setRowHeaderView (table2);
    scroll.setCorner (ScrollPaneConstants.UPPER_LEFT_CORNER,table2.getTableHeader ());
    frame.add (scroll);
    frame.pack ();
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    frame.setVisible (true);
  }
}


спасибо за пример!  smile 
я переписал уже свой компонент, спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)