Простые значения внутри функций не изменят эти значения вне функции (они передаются по значению), тогда как сложные (будут переданы по ссылке).
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
Существует два способа создания JTable с базовым подготовленным набором данных:
Object
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 в этом примере без каких-либо забот.
Вы не можете загружать объекты данных в DefaultTableModel. Для этого вам нужно создать пользовательский TableModel. Модель Bean Table Model - такая модель, которая облегчит вам этот процесс.
Я никогда раньше не использовал JTable, но в документации говорится, что конструктор принимает «вектор векторов» как первый параметр, а не вектор объектов данных.
Проблема заключается в том, что используемый вами конструктор предназначен для хранения вектора, который содержит другие векторы.
Каждый, у кого есть информация.
См. этот рабочий пример, чтобы понять его лучше:
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
Если вы еще не сделали этого.
TableModel
. – akf 23 June 2010 в 04:22