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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTable, Редактирование ячеек таблицы 
:(
    Опции темы
Andyb
  Дата 8.6.2004, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 7.6.2004
Где: Lille, France

Репутация: 4
Всего: 5



Есть вопрос: как сделать редактором ячейки таблицы текстовую область с кнопкой вместо стандартных JCheckBox или JComboBox. Пример здесь
--------------------
 Большинство наших ошибок происходит из-за невнимательности.
PM ICQ   Вверх
Domestic Cat
Дата 8.6.2004, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Pomestit' knopku v JTable mozhno tak:
Код

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


class JTableButtonRenderer implements TableCellRenderer
{
 private TableCellRenderer defaultRenderer;

 public JTableButtonRenderer(TableCellRenderer renderer)
{
   defaultRenderer = renderer;
 }

 public Component getTableCellRendererComponent(JTable table, Object value,
                                                boolean isSelected,
                                                boolean hasFocus,
                                                int row, int column)
 {
   if(value instanceof Component)
     return (Component)value;
   return defaultRenderer.getTableCellRendererComponent(
          table, value, isSelected, hasFocus, row, column);
 }
}

class JTableButtonModel extends AbstractTableModel
{
 private Object[][] rows = new Object[4][2];
 
 JTableButtonModel()
 {
   MyButton b1 = new MyButton("Change font");
   MyButton b2 = new MyButton("Change size");
   MyButton b3 = new MyButton("Change spacing");
   MyButton b4 = new MyButton("Change margin");
   rows[0][0] = "Font";
   rows[0][1] = b1;
   rows[1][0] = "Size";
   rows[1][1] = b2;
   rows[2][0] = "Spacing";
   rows[2][1] = b3;
   rows[3][0] = "Margin";
   rows[3][1] = b4;
   EventButHandler eventHandler = new EventButHandler();
   eventHandler.register(b1, b2, b3, b4);
   b1.addActionListener(eventHandler);
   // etc ...
 }

 private String[] columns = { "Numbers", "Buttons" };

 public String getColumnName(int column)
{
   return columns[column];
 }

 public int getRowCount()
{
   return rows.length;
 }

 public int getColumnCount()
 {
   return columns.length;
 }

 public Object getValueAt(int row, int column)
{
     return rows[row][column];
 }

 public boolean isCellEditable(int row, int column)
{
   return false;
 }

 public Class getColumnClass(int column)
{
   return getValueAt(0, column).getClass();
 }
}
class EventButHandler implements ActionListener
{
   MyButton b1, b2, b3, b4;
   void register (MyButton b1, MyButton b2, MyButton b3, MyButton b4)
   {
       this.b1= b1;
       this.b2 = b2;
       this.b3 = b3;
       this.b4 = b4;
   }
   
   public void actionPerformed(ActionEvent ae)
   {
       
       if (ae.getSource().equals(b1))
       {
           System.out.println("Button pressed");
       }
   }
   

}
class MyButton extends JButton
{
   MyButton(String name)
   {
       super(name);
   }
   
   void fireEvent(ActionEvent ae)
   {
       fireActionPerformed(ae);
   }
}
class JTableButtonMouseListener implements MouseListener
{
 private JTable table;

 private void forwardEventToButton(MouseEvent e) {
   TableColumnModel columnModel = table.getColumnModel();
   int column = columnModel.getColumnIndexAtX(e.getX());
   int row    = e.getY() / table.getRowHeight();
   Object value;
   MyButton button;
   MouseEvent buttonEvent;

   if(row >= table.getRowCount() || row < 0 ||
      column >= table.getColumnCount() || column < 0)
     return;

   value = table.getValueAt(row, column);

   if(!(value instanceof MyButton))
     return;
     button = (MyButton)value;
     button.fireEvent(new ActionEvent(button, ActionEvent.ACTION_PERFORMED, ""));
 }

 public JTableButtonMouseListener(JTable table)
{
   this.table = table;
 }

 public void mouseClicked(MouseEvent e)
{
   //forwardEventToButton(e);
 }

 public void mouseEntered(MouseEvent e)
{
 }

 public void mouseExited(MouseEvent e)
{
 }

 public void mousePressed(MouseEvent e)
{
 forwardEventToButton(e);
 }

 public void mouseReleased(MouseEvent e)
{
 }
}

public final class JTableButton extends JFrame
{
 private JTable table;
 private JScrollPane scrollPane;

 public JTableButton() {
   super("JTableButton Demo");
   TableCellRenderer defaultRenderer;

   table = new JTable(new JTableButtonModel());
   defaultRenderer = table.getDefaultRenderer(JButton.class);
   table.setDefaultRenderer(JButton.class,
                              new JTableButtonRenderer(defaultRenderer));
   table.setPreferredScrollableViewportSize(new Dimension(400, 200));
   table.addMouseListener(new JTableButtonMouseListener(table));

   scrollPane = new JScrollPane(table);
   setContentPane(scrollPane);
 }

 public static void main(String[] args)
{
   Frame frame;
   WindowListener exitListener;

   exitListener = new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       Window window = e.getWindow();
       window.setVisible(false);
       window.dispose();
       System.exit(0);
     }
   };

   frame = new JTableButton();
   frame.addWindowListener(exitListener);
   frame.pack();
   frame.setVisible(true);
 }
}



Nu a kak sovmestit' ee e JLabel - nuzhno podumat'.


--------------------

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

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

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


 




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


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

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