powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JTable
10 сообщений из 10, страница 1 из 1
JTable
    #34345253
yonder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста, как обратиться к конкретной ячейке таблицы JTable?
Ситуация следующая: создаются две таблицы n x n, в ячейке 1 таблицы вводяться данные, о во второй таблице в той же ячейке они должны отобразиться.
...
Рейтинг: 0 / 0
JTable
    #34345355
diablero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это вам нужно действовать по следующему плану:
1. для первой таблицы переопределить метод
Код: plaintext
 public   void  tableChanged(TableModelEvent event)
в котором, при изменении данных в этой таблице, они вносятся во вторую, куда вам надо.
2. (Опционально) Написать свой TableCellEditor для первой таблицы, все зависит от типов данных.
Ну и это вам позволит сделать редактирование более доступным для пользователя.
3. (Опционально) Написать свои модели таблицы, так удобнее.

Будут вопросы, спрашивайте
...
Рейтинг: 0 / 0
JTable
    #34345375
yonder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помощь, а не могли бы дать ссылку на какой-нибудь пример, где используется что-либо подобное. Только начал осваивать java, еще многое не понятно, а на примере намного легче :)
...
Рейтинг: 0 / 0
JTable
    #34345387
diablero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прям подобного примера, я не встречал.
В архиве примеры работы со всем что Вам надо, взято из книги Ивана Портянкина
...
Рейтинг: 0 / 0
JTable
    #34345412
diablero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, очень хороший пример, он точно должен Вам помочь. Взято из книги "Thinking in Java"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
 import  javax.swing.*;
 import  javax.swing.table.AbstractTableModel;
 import  javax.swing.event.TableModelEvent;
 import  javax.swing.event.TableModelListener;
 import  java.awt.*;

 public   class  test  extends  JFrame{
    JTextArea txt =  new  JTextArea( 4 ,  20 );

    test() {
        Container cp = getContentPane();
        JTable table =  new  JTable( new  DataModel());
        cp.add( new  JScrollPane(table));
        cp.add(BorderLayout.SOUTH, txt);
        setSize( 800 ,  600 );
        setLocationRelativeTo( null );
    }
     class  DataModel  extends  AbstractTableModel {
    Object[][] data = {
      {"one", "two", "three", "four"},
      {"five", "six", "seven", "eight"},
      {"nine", "ten", "eleven", "twelve"},
    };
    // Печатает данные при изменении таблицы:
     class  TML  implements  TableModelListener {
       public   void  tableChanged(TableModelEvent e){
        txt.setText(""); // Очистка
         for ( int  i =  0 ; i < data.length; i++) {
           for ( int  j =  0 ; j < data[ 0 ].length; j++)
            txt.append(data[i][j] + " ");
          txt.append("\n");
        }
      }
    }
     public  DataModel() {
      addTableModelListener( new  TML());
    }
     public   int  getColumnCount() {
       return  data[ 0 ].length;
    }
     public   int  getRowCount() {
       return  data.length;
    }
     public  Object getValueAt( int  row,  int  col) {
       return  data[row][col];
    }
     public   void 
    setValueAt(Object val,  int  row,  int  col) {
      data[row][col] = val;
      // Указывает на появление изменений:
      fireTableDataChanged();
    }
     public   boolean 
    isCellEditable( int  row,  int  col) {
       return  true;
    }
  }
   public   static   void  main(String []arg) {
        java.awt.EventQueue.invokeLater( new  Runnable() {
             public   void  run() {
                 new  test().setVisible(true);
            }
        });
  }
}



...
Рейтинг: 0 / 0
JTable
    #34348516
yonder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Diablero, спасибо Вам огромное, Вы мне очень помогли
...
Рейтинг: 0 / 0
JTable
    #34348596
anton_evane
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JTable
    #34369558
yonder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, пожалуйста, возникает ошибка при попытке построить таблицу на основе массива dataInt из данных первой таблицы (кусок кода, на котором все валится, выделен жирным).
Возникает следующая ошибка:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at test$DataModel$TML.tableChanged(test.java:117)
at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
at javax.swing.table.AbstractTableModel.fireTableDataChanged(AbstractTableModel.java:182)




import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

public class test extends JFrame implements PropertyChangeListener {
Container cp;
// JTable table;
JTable table2;
Integer tableSize = new Integer(5);
Object[][] data;
Object[][] dataArray;
int[][] dataInt = new int[tableSize.intValue()][tableSize.intValue()];
int flag = 0;
int hh2 = tableSize.intValue();
double amount = 5;
JFormattedTextField taField;
JLabel label = new JLabel("Размер таблицы:");
JButton button = new JButton("Построить таблицу");

test() {

final Container cp = (JPanel) getContentPane();
cp.setLayout(new FlowLayout());
JTable table = new JTable(new DataModel(0));
// JTable table2 = new JTable(new DataModel(1));
int jj = tableSize.intValue();
for (int i = 0; i < jj; i++) {
setUpColumn(table, table.getColumnModel().getColumn(i));
}
cp.add(new JScrollPane(table));
cp.add(new JScrollPane(table2));

NumberFormat amountFormat = NumberFormat.getNumberInstance();
taField = new JFormattedTextField(amountFormat);
taField.setPreferredSize(new Dimension(80, 23));
taField.addPropertyChangeListener("value", this);
taField.setValue(new Double(amount));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tableSize = Integer.valueOf(taField.getText());
}
});
cp.add(label);
cp.add(taField);
cp.add(button);
setSize(800, 600);
setLocationRelativeTo(null);

}
public void setUpColumn(JTable table, TableColumn Column) {
JComboBox comboBox = new JComboBox();

for (int i = 0; i < 10; i++) {
Integer k = Integer.valueOf(String.valueOf((int) (Math.random() * 250)));
comboBox.addItem(k);

}
Column.setCellEditor(new DefaultCellEditor(comboBox));
DefaultTableCellRenderer renderer =
new DefaultTableCellRenderer();
renderer.setToolTipText("Click for combo box");
table.setForeground(Color.red);
Column.setCellRenderer(renderer);
}

class DataModel extends AbstractTableModel {
int hh = tableSize.intValue();
private String[] columnNames = new String [tableSize.intValue()];
Object[][] data = new Object [tableSize.intValue()][tableSize.intValue()];
// public final Object[] longValues = new Object [PlotTable.tableSize.intValue()];

DataModel(int r) {
Integer a = new Integer(r);
for (int g = 0; g < hh; g++) {
columnNames[g] = "Column" + (g + 1);
}
if (r == 0) {
for (int g = 0; g < hh; g++) {
for (int gg = 0; gg < hh; gg++) {
data[g][gg] = a;
}
}
addTableModelListener(new TML());
} else {
for (int g = 0; g < hh; g++) {
for (int gg = 0; gg < hh; gg++) {
data[g][gg] = new Integer(dataInt[g][gg]);
}
}
}
}
// Печатает данные при изменении таблицы:
class TML implements TableModelListener {
public void tableChanged(TableModelEvent e) {
Integer num;
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[0].length; j++) {

num = (Integer) data [j];
dataInt[j] = num.intValue();
System.out.println("dataInt="+dataInt[j]+" i="+i+" j="+j);
}
}

JTable table2 = new JTable(new DataModel(1));
cp.add(new JScrollPane(table2));
}
}

public int getColumnCount() {
return data[0].length;
}

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

public Object getValueAt(int row, int col) {
return data[row][col];
}

public void
setValueAt(Object val, int row, int col) {
data[row][col] = val;
// Указывает на появление изменений:
fireTableDataChanged();
}

public boolean
isCellEditable(int row, int col) {
return true;
}


}

public static void main(String []arg) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new test().setVisible(true);
}
});

}

public void propertyChange(PropertyChangeEvent e) {
Object source = e.getSource();
if (source == taField) {
amount = ((Number) taField.getValue()).doubleValue();
}
}
}
...
Рейтинг: 0 / 0
JTable
    #34370371
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, может мы посмотрим на стэктрэйс и подумаем где на самом деле всё валиться?
...
Рейтинг: 0 / 0
JTable
    #34370527
yonder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот:

java.lang.NullPointerException
at test$DataModel$TML.tableChanged(test.java:117)
at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
at javax.swing.table.AbstractTableModel.fireTableDataChanged(AbstractTableModel.java:182)
at test$DataModel.setValueAt(test.java:137)
at javax.swing.JTable.setValueAt(JTable.java:1794)
at javax.swing.JTable.editingStopped(JTable.java:3167)
at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:124)
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(DefaultCellEditor.java:329)
at javax.swing.DefaultCellEditor$3.stopCellEditing(DefaultCellEditor.java:139)
at javax.swing.DefaultCellEditor.stopCellEditing(DefaultCellEditor.java:214)
at javax.swing.DefaultCellEditor$EditorDelegate.actionPerformed(DefaultCellEditor.java:346)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1197)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:561)
at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:597)
at javax.swing.plaf.basic.BasicComboPopup$ListMouseHandler.mouseReleased(BasicComboPopup.java:749)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:232)
at java.awt.Component.processMouseEvent(Component.java:5100)
at javax.swing.plaf.basic.BasicComboPopup$2.processMouseEvent(BasicComboPopup.java:452)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Container.processEvent(Container.java:1569)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
at java.awt.Container.dispatchEventImpl(Container.java:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:480)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]