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


Автор: man_without_face 18.7.2008, 15:25
есть ситуация. некоторые данные берутся из файла, затем они парсятся и создаётся таблица (JTable). Задача состоит в том, чтобы предоставить пользователь некий GUI, для удобства ввода имён колонок. Вопрос в том, как это просто и удобно сделать? 

Выводить n-раз пользователю "Введите название для колонки n:" - думаю напряжно. Тем более нельзя будет перемещаться между колонками. 

Выводить пользователю n штук JTextField - тоже не хорошо, учитывая то, что колонок может быть 100 штук, тогда как их расположить на фрейме.

Может кто-то может подсказать способ, как удобнее всего предоставить пользователю иненование колонок?

Автор: AntonSaburov 18.7.2008, 17:43
По-моему лучше всего сделать сначала имена по умолчанию, и дать возможность пользователю исправлять конкретную колонку.

Автор: man_without_face 18.7.2008, 18:02
Нет, так не хорошо. Причины две.

1. Заказчик так не хочет.
2. Представьте если колонок 100. Тогда ему надо будет прокручивать таблицу, искать нужный столбец и его править.

Автор: dorogoyIV 18.7.2008, 18:06
Цитата(man_without_face @  18.7.2008,  15:25 Найти цитируемый пост)
предоставить пользователь некий GUI, для удобства ввода имён колонок

могу предложить такое извращение  smile 
работает по клику мыши и нажатию клавиши Enter
Код

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

public class RenameTableHeader extends JFrame
{
 int num = 0;

 public RenameTableHeader()
 {
  Object [][] rowData = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
  Object [] columnNames = {"one", "two", "three"};

  final JLayeredPane lp = getLayeredPane();
  final JTextField jtf = new JTextField();

  JTable table = new JTable(rowData, columnNames);
  add(new JScrollPane(table));

  final JTableHeader header = table.getTableHeader();

  header.addMouseListener(new MouseAdapter()
  {
   public void mouseClicked(MouseEvent e)
   {
    Point point = e.getPoint();
    num = header.columnAtPoint(point);
    Rectangle r = header.getHeaderRect(num);

    jtf.setBounds(r);
    jtf.setText(header.getColumnModel().getColumn(num).getHeaderValue() + "");
    lp.add(jtf, 0);
   }
  });

  jtf.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    header.getColumnModel().getColumn(num).setHeaderValue(jtf.getText());
    lp.remove(jtf);
    repaint();
   }
  });
 }

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

Автор: man_without_face 18.7.2008, 18:17
не. пользователь замучается крутить скролом, называя имена колонок. Хммм.... Может сделать таблицу с одной колонкой, в которой юзер укажет имена всех нужных ему колонок? Прокручивать тоже будет, понятное дело, но думаю удобнее. что скажете? 

Автор: dorogoyIV 19.7.2008, 04:34
Цитата(man_without_face @  18.7.2008,  18:17 Найти цитируемый пост)
что скажете? 

по моему привычнее - куда тычешь, то и редактировать

в конце концов для чего таблица?, что бы колонки переименовывать, или ячейки с данными? smile 

Автор: Mayk 19.7.2008, 06:56
Цитата(man_without_face @  18.7.2008,  22:17 Найти цитируемый пост)
не. пользователь замучается крутить скролом, называя имена колонок. Хммм.... Может сделать таблицу с одной колонкой, в которой юзер укажет имена всех нужных ему колонок? Прокручивать тоже будет, понятное дело, но думаю удобнее. что скажете?  

Имхо можно добавить  колонку с порядковым номером изменяемого названия колонки.  


Цитата(dorogoyIV @  19.7.2008,  08:34 Найти цитируемый пост)

по моему привычнее - куда тычешь, то и редактировать

это хорошо если тебе надо изментиь  1 название из 256. при  смене всез заголвков эта идея неудобварима из за излешнего скролла вправо.


Можно сделать оба варианта.

Автор: dorogoyIV 19.7.2008, 08:30
хм...
тогда на фрейме надо сделать дополнительную панель(например слева с вертикальным Layout). на этой панели будут отображаться названия колонок. и надо сделать, что бы на этой же панели можно было редактировать эти названия столбцов.
эта панель должна иметь возможность быть скрытой/открытой
ИМХО

Автор: man_without_face 21.7.2008, 16:58
сделал. всем спасибо. 


P.S. тип данных нужен по задаче. 

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