我目前有两个类,一个是AddressDetails,另一个是Results。 我想发生的是该表填充了两者的值,但是当前它仅填充了AddressDetails。
我的TableView代码是:
table = new TableView<AddressDetails>();
TableColumn<AddressDetails, String> address = new TableColumn<>("Full Address");
TableColumn<AddressDetails, String> buildingName = new TableColumn<>("Building Name");
TableColumn<AddressDetails, Double> buildingNum = new TableColumn<>("Building Number");
TableColumn<AddressDetails, String> streetNam = new TableColumn<>("Street Name");
TableColumn<AddressDetails, String> cityName = new TableColumn<>("City");
TableColumn<AddressDetails, String> postcode = new TableColumn<>("Postcode");
TableColumn<AddressDetails, String> countryName = new TableColumn<>("Country");
TableColumn<Results, String> connect = new TableColumn<>("Connectivity Result");
buildingName.setCellValueFactory(new PropertyValueFactory<>("buildName"));
buildingNum.setCellValueFactory(new PropertyValueFactory<>("buildNum"));
streetNam.setCellValueFactory(new PropertyValueFactory<>("streetName"));
cityName.setCellValueFactory(new PropertyValueFactory<>("city"));
postcode.setCellValueFactory(new PropertyValueFactory<>("postCode"));
countryName.setCellValueFactory(new PropertyValueFactory<>("country"));
connect.setCellValueFactory(new PropertyValueFactory<>("connect"));
// Add columns of the address details to full address column
address.getColumns().addAll(buildingName, buildingNum, streetNam, cityName, postcode, countryName);
table.getColumns().addAll(address, connect);
结果类:
public class Results {
private String connect;
public Results() {
}
*Constructor, getters and setters
AddressDetails类:
public class AddressDetails {
private String buildName;
private double buildNum;
private String streetName;
private String city;
private String postCode;
private String country;
//private Results result;
public AddressDetails() {
}
*Constructor, getters and setters
我本来会创建一个包含所有对象的类,但是当前AddressDetails从读取和excel文件获取其值,而Results从API调用获取其值,所以我猜测我需要将AddressDetails和Results放入另一个类这样我就可以将TableView称为TableView之类的东西。但是我不确定该怎么做。由于我是JavaFX和Java的新手,所以将不胜感激,所以对它的了解并不多,尤其是对于TableViews。
答案 0 :(得分:0)
因此,我想出了一种方法,可以重新使用相同的数据类从SQL中获取数据。不幸的是,我无法获得对ApacheDBUtils使用SimpleStringProperty或SimpleIntegerProperty(0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000011010100100001010000000000000000000000
所必需的)的反思。但是,使用TableView
可以手动填充字段。基本上,使MapListHandler
的模型类也成为您的数据类。
Address.java
TableView
SQLManager.java
package fx;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public class Address
{
private final StringProperty city;
private final StringProperty country;
public Address()
{
this.city = new SimpleStringProperty();
this.country = new SimpleStringProperty();
}
public static List<Address> getAddressesFromMap(List<Map<String, Object>> addressResults)
{
List<Address> addresses = new ArrayList<>();
for (Map<String, Object> addressResult : addressResults)
{
Address address = new Address();
address.setCity((String) addressResult.get("city"));
address.setCountry((String) addressResult.get("country"));
addresses.add(address);
}
return addresses;
}
/**
* @return the city
*/
public StringProperty getCity()
{
return city;
}
/**
* @return the country
*/
public StringProperty getCountry()
{
return country;
}
/**
* @param city the city to set
*/
public void setCity(String city)
{
this.city.set(city);
}
/**
* @param country the country to set
*/
public void setCountry(String country)
{
this.country.set(country);
}
}
Main.java
package fx;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;
public class SQLManager
{
public List<Address> getAddresses()
{
Connection connection = createConnection();
List<Address> addresses = new ArrayList<>();
List<Map<String, Object>> addressResults = new ArrayList<>();
if (connection == null)
{
return addresses;
}
try
{
addressResults = new QueryRunner().query(connection, "SELECT * From address;", new MapListHandler());
} catch (SQLException ex)
{
Logger.getLogger(SQLManager.class.getName()).log(Level.SEVERE, null, ex);
} finally
{
try
{
DbUtils.close(connection);
} catch (SQLException ex)
{
Logger.getLogger(SQLManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
addresses.addAll(Address.getAddressesFromMap(addressResults));
return addresses;
}
private Connection createConnection()
{
Connection connection = null;
try
{
connection = DriverManager.getConnection("db.connection", "db.user", "db.pass");
} catch (SQLException ex)
{
Logger.getLogger(SQLManager.class.getName()).log(Level.SEVERE, null, ex);
}
return connection;
}
}