Отображение [] [] с помощью addRow () JTable [duplicate]

Простые значения внутри функций не изменят эти значения вне функции (они передаются по значению), тогда как сложные (будут переданы по ссылке).

function willNotChange(x) {

x = 1;

}

var x = 1000;

willNotChange(x);

document.write('After function call, x = ' + x + '<br>'); //still 1000

function willChange(y) {

y.num = 2;

}

var y = {num: 2000}; 

willChange(y);
document.write('After function call y.num = ' + y.num + '<br>'); //now 2, not 2000
4
задан Gabriel A. Zorrilla 22 June 2010 в 04:10
поделиться

5 ответов

Существует два способа создания JTable с базовым подготовленным набором данных:

  1. массив 2D Object
  2. a Vector, элементами которого являются Vector

, чтобы вы могли сделать это:

 Object [][] model = {{"Marrie", "Female","33"},{"John","Male","32"}};
 JTable table = new JTable(model);

, или вы могли бы сделать это:

 Vector model = new Vector();
 Vector row = new Vector();

 row.add("Marrie");
 row.add("Female");
 row.add("33");
 model.add(row);

 row = new Vector();
 row.add("John");
 row.add("Male");
 row.add("32");
 model.add(row);

 JTable table = new JTable(model);

Следующим шагом будет чтобы реализовать свой собственный TableModel, чтобы использовать класс DataObject, который вы собрали вместе (обратите внимание, что классы Java начинаются с кепок). Расширение AbstractTableModel облегчает жизнь, так как вам нужно всего лишь реализовать три метода:

public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);

первые два из них просты, вы можете получить размер вашего Vector для подсчета строк и hard-code val для количества столбцов. getValueAt, где вы извлекаете данные из своего DataObject

Вот пример использования анонимного класса, расширяющий AbstractTableModel.

final Vector<DataObject> myDataObjects = new Vector<DataObject>();
myDataObjects.add(...);// add your objects
JTable table = new JTable(new AbstractTableModel() {

    public int getRowCount() {return myDataObjects.size();}
    public int getColumnCount() { return 3; }
    public Object getValueAt(int row, int column){
         switch (column) {
           case 0:
              return myDataObjects.get(row).getName();
           case 1:
              return myDataObjects.get(row).getGender();
           case 2:
              return myDataObjects.get(row).getAge();
           default:
              return "";
         }
    }
});

Я сохранил Vector, чтобы он был близок к вашей текущей реализации. Вы можете легко изменить это на ArrayList в этом примере без каких-либо забот.

4
ответ дан akf 23 August 2018 в 01:33
поделиться
  • 1
    Глядя на ваш код и код поддержки, я считаю, что тривиально иметь «объект данных». Данные просто помещаются в модель, заполняя массив, а затем доступны через модель. – Gabriel A. Zorrilla 23 June 2010 в 04:13
  • 2
    Я согласен, в этом примере это довольно простая структура данных. В этом здесь полезно просто показать, как использовать пользовательский объект, поддерживающий строку в TableModel. – akf 23 June 2010 в 04:22
0
ответ дан arooaroo 23 August 2018 в 01:33
поделиться

Вы не можете загружать объекты данных в DefaultTableModel. Для этого вам нужно создать пользовательский TableModel. Модель Bean Table Model - такая модель, которая облегчит вам этот процесс.

1
ответ дан camickr 23 August 2018 в 01:33
поделиться

Я никогда раньше не использовал JTable, но в документации говорится, что конструктор принимает «вектор векторов» как первый параметр, а не вектор объектов данных.

0
ответ дан dsmith 23 August 2018 в 01:33
поделиться

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

Каждый, у кого есть информация.

См. этот рабочий пример, чтобы понять его лучше:

import javax.swing.*;
import java.util.Vector;

public class TableDemo {
    public static void main( String [] args ){
        Vector<Vector<Object>> data = new Vector<Vector<Object>>();

        Vector<Object> row = new Vector<Object>();
        row.add( "Marie");
        row.add( "Female");
        row.add( 33);
        data.add(row);

        Vector<Object> otherRow = new Vector<Object>();
        otherRow.add( "John");
        otherRow.add( "Male");
        otherRow.add( 32 );
        data.add(otherRow);

        Vector<String> headers = new Vector<String>();
        headers.add("Name");
        headers.add("Gender");
        headers.add( "Age");


        JTable table = new JTable( data, headers );

        JFrame frame = new JFrame();
        frame.add( new JScrollPane( table ));
        frame.pack();
        frame.setVisible( true ); 

    }
}

Что создает:

что-то вроде этого http: //img695.imageshack. us / img695 / 2032 / capturadepantalla201006r.png

На всякий случай вы должны посмотреть на это:

http: //java.sun. com / docs / books / tutorial / uiswing / components / table.html

Если вы еще не сделали этого.

3
ответ дан OscarRyz 23 August 2018 в 01:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: