[英]Javafx TableView ArrayList class property
我試圖創建一個TableView,而最初不知道它應該有多少列。 我實現了一個與文檔示例http://www.java2s.com/Code/Java/JavaFX/AddnewrowtoTableView.htm中的類相同的類
但是我想要的是該類具有ArrayList參數,例如private final ArrayList<Double> values;
並能夠為ArrayList中的每個值創建一列。
我知道這是不正確的,所以我想知道是否存在一種不費吹灰之力的方法來實現此目的。
如果要使用此類,則添加列和等於JTable
的行數據,可以使用String
數組放置列標題,並使用矩陣添加數據(如果要這樣做)僅添加一行使用addRow
方法。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.MapValueFactory;
/**
*
* @author Raul Junior
*/
public class TableView2 extends TableView {
private final ObservableList<Map> allData;
private final ArrayList<ModeloColumna> columnList;
private TableColumn<Map,String> columns[];
private String defaultName = "column";
private double minWidthColumn;
/**
* Constructor por defecto. Inicializa el objeto allData, columnList,
* invoca el método setEditable(true).
*/
public TableView2(){
allData = FXCollections.observableArrayList();
columnList = new ArrayList<>();
setEditable(true);
setMinWidthColumn(130);
}
/**
* Constructor que crea columnas con títulos.
* Inicializa el objeto allData, columnList, invoca el método setEditable(true).
* @param columnTitles Títulos de las columnas que se crearán.
*/
public TableView2(String columnTitles[]){
allData = FXCollections.observableArrayList();
columnList = new ArrayList<>();
setEditable(true);
setMinWidthColumn(130);
setColumnTitles(columnTitles);
}
/**
* Constructor que crea columnas con títulos y filas con sus correspondientes datos.
* Inicializa el objeto allData, columnList, invoca el método setEditable(true).
* @param columnTitles Títulos de las columnas que se crearán.
* @param data Datos que tendrán las celdas.
*/
public TableView2(String columnTitles[], String data[][]){
allData = FXCollections.observableArrayList();
columnList = new ArrayList<>();
setEditable(true);
setMinWidthColumn(130);
setColumnTitles(columnTitles);
addRows(data);
}
/**
* Añade una fila.
* @param values El array que contiene los valores de la nueva fila.
*/
public void addRow(String values[]){
Map<String, String> row = new HashMap<>();
for(int i = 0; i < values.length; i++){
row.put(columnList.get(i).getColumnKeyMap(), values[i]);
}
allData.add(row);
this.getItems().add(allData.get(allData.size()-1));
}
/**
* Añade nuevas filas.
* @param values Es la matriz que contiene los valores de las nuevas filas
* que se crearán.
*/
public final void addRows(String values[][]){
for(String[] value : values){
Map<String, String> row = new HashMap<>();
for(int i = 0; i < value.length; i++){
row.put(columnList.get(i).getColumnKeyMap(), value[i]);
}
allData.addAll(row);
this.getItems().add(allData.get(allData.size()-1));
}
}
/**
* Obtiene un array de TableColumn.
* @return Devuelve un array de TableColumns
*/
public TableColumn<Map, String>[] getArrayColumns() {
return columns;
}
/**
* Obtiene la llave del mapeo de la columna.
* @param column El índice de la columna.
* @return Devuelve un String.
*/
public String getColumnKeyMap(int column) {
return columnList.get(column).getColumnKeyMap();
}
/**
* Obtiene el título de la columna.
* @param column El índice de la columna.
* @return Devuleve un String.
*/
public String getColumnTitle(int column) {
return columnList.get(column).getColumnTitle();
}
/**
* Obtiene el atributo defaultName.
* @return Devuelve un String
*/
public String getDefaultName() {
return defaultName;
}
/**
* Obtiene el valor del mínimo ancho de la columna.
* @return Devuelve un double.
*/
public double getMinWidthColumn() {
return minWidthColumn;
}
/**
* Obtiene el valor de la celda según los índices de fila y columna.
* @param row El índice de la fila.
* @param column El índice de la columna.
* @return Devuelve un String.
*/
public String getValueAt(int row, int column){
return (String)allData.get(row).get(columnList.get(column).getColumnKeyMap());
}
/**
* Crea y pone títulos a las columnas.
* @param columnTitles Es el array que contiene los títulos de las columnas.
*/
public final void setColumnTitles(String columnTitles[]) {
columns = new TableColumn[columnTitles.length];
for(int i = 0; i < columnTitles.length; i++){
columnList.add(new ModeloColumna(columnTitles[i], defaultName+i));
columns[i] = new TableColumn(columnList.get(i).getColumnTitle());
columns[i].setCellValueFactory(new MapValueFactory(columnList.get(i).getColumnKeyMap()));
columns[i].setMinWidth(minWidthColumn);
//tableView.getColumns().add(columns[i]);
}
this.getColumns().setAll((Object[]) columns);
}
/**
*
* Elimina la fila según el índice.
* @param row El índice de la fila.
*/
public void remove(int row) {
allData.remove(row);
this.getItems().remove(row);
}
/**
* Cambia la propiedad defaultName.
* @param defaultName Nombre por defecto con el que se mapeará cada columna,
* por defecto es "column", cada columna se mapea con el nombre mas el índice,
* es decir: column0, column1 y así sucesivamente.
*/
public void setDefaultName(String defaultName) {
this.defaultName = defaultName;
}
/**
* Cambia el valor de la propiedad minWidthColumn.
* @param minWidthColumn El mínimo tamaño de la columna.
*/
public final void setMinWidthColumn(double minWidthColumn) {
this.minWidthColumn = minWidthColumn;
}
/**
* @author Raul Junior
*/
private class ModeloColumna{
private final String columnKeyMap;
private final String columnTitle;
public ModeloColumna(String columnTitle, String columnKeyMap){
this.columnTitle = columnTitle;
this.columnKeyMap = columnKeyMap;
}
public String getColumnKeyMap() {
return columnKeyMap;
}
public String getColumnTitle() {
return columnTitle;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.