Редактор ячейки таблицы

Модератор: Absurd

Ответить
keo
Сообщения: 46
Зарегистрирован: 25 апр 2006, 17:35
Откуда: Украина, Киев

Написал я класс...

Код: Выделить всё

public class KTextButton
      extends JTextField
      implements ActionListener {

    public KTextButton() {
      super();
      setEditable(false);
      setHorizontalAlignment(CENTER);
      JButton b = new JButton("...");
      b.setBounds(0, 0, 15, 15);
      b.addActionListener(this);
      add(b);
    }

    public void actionPerformed(ActionEvent e) {
      JOptionPane.showMessageDialog(null, "Action");
    }
Использую я его как редактор ячейки таблицы

Код: Выделить всё

KTextButton tb=new KTextButton();
colm = table.getColumnModel().getColumn(4);
colm.setCellEditor(new DefaultCellEditor(tb));
Единственное что мне не нравится, то что кнопка в левой стороне. Хотелось бы чтоб она была справа.
Может кто знает как ее туда поместить? Размеры текстового поля заранее неизвестны.

И еще...
Может быть кто-то знает как лучше решить данную проблему. Пожалуйста напишите!
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

keo, у меня такой код

Код: Выделить всё

JFrame frame = new JFrame("test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
JTable table = new JTable(10, 10);

TableColumn column = table.getColumnModel().getColumn(4);
column.setCellEditor(new DefaultCellEditor(new KTextButton()));
		
frame.add(table);
frame.pack();
		
frame.setVisible(true);
вообще никаких кнопок не рисует.
keo писал(а):Может быть кто-то знает как лучше решить данную проблему
Какую проблему?
keo
Сообщения: 46
Зарегистрирован: 25 апр 2006, 17:35
Откуда: Украина, Киев

Oscar
вообще никаких кнопок не рисует.
Попробовал твой код - все работает! Просто кнопка видна только когда ячейка начинается редактироваться, а до этого ячейка ничем не отличается от других.
Какую проблему?
Задача такая. В строке таблицы должна отображаться надпись, например "Документ РН-0000001". При попытки отредактировать ячейку (после нажатия как раз на эту кнопочку) должна открываться форма (журнал документов), в которой отображаются все документы. В журнале кроме номера может быть представлена еще информация о дате и времени создания, авторе и т.п. После выбора документа в ячейку таблицы возращается номер выбранного документа!

Такое можно увидить в 1С...
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

keo,

Код: Выделить всё

b.setBounds(0, 0, 15, 15);
если x = 0, то как же кнопка может находиться справа? ;-)

Поставь, например:

Код: Выделить всё

b.setBounds(60, 0, 15, 15);
и будет тебе счастье!

Но не долго ...

Как только будет ресайз колонки кнопка сьедет куда-нить в сторону .. (то есть кнопка-то останется на месте, но сам Field сьедет).

А потому лучше сделать так, чтоб наверняка:

Код: Выделить всё

public class KTextButton extends JTextField implements ActionListener {

		JButton button;

		public KTextButton() {
			super();
			setEditable(false);
			setHorizontalAlignment(CENTER);
			
			button = new JButton("...");
			button.addActionListener(this);
			add(button);
		}
		
		public void setBounds(int x, int y, int width, int height) {
			super.setBounds(x, y, width, height);
			button.setBounds(width - 15, 0, 15, 15);
		}

		public void actionPerformed(ActionEvent e) {
			JOptionPane.showMessageDialog(null, "Action");
		}
	}
вот ..

и я не собираюсь тебе говорить, что добавлять JButton на JTextField - это извращение ..

и советовать прочитать Java Tutorial "How to Use Tables" тоже не буду ..

зачем оно тебе, если раздел Using Other Editors всего лишь описывает правильное (надёжное) решение твоей проблемы ...

тебе ведь видней, что ты там делаешь ..
keo
Сообщения: 46
Зарегистрирован: 25 апр 2006, 17:35
Откуда: Украина, Киев

Спасибо за помощь и добрые слова....
Ответить