在我的项目中,出于某种目的,有一堆标签。由于我可以使用拖动在堆栈窗口上移动它们,我希望能够在我的应用程序中保存它们的新位置。所以我在考虑数据库,包括X和Y位置的列,标签名称及其文本。
但是,由于我想使用相当多的标签,我不想一个接一个地从数据库中加载标签,所以我使用了这个:
private void button_load(ActionEvent event) {
try{
String host = "jdbc:sqlite:C://app/app.sqlite";
Connection con = DriverManager.getConnection(host);
PreparedStatement pst = null;
String SQL = "select * from labels";
pst=con.prepareStatement(SQL);
ResultSet rs=pst.executeQuery();
while(rs.next()){
String name=rs.getString("Name");
Double Y=rs.getDouble("Y");
Double X=rs.getDouble("X");
String Text=rs.getString("Text");
name.setLayoutX(X);
name.setLayoutX(Y);
name.setText(Text);
}}
catch (SQLException ex)
{ Logger.getLogger(app.class.getName()).log(Level.SEVERE, null, ex);}}
明显的问题是,我不允许使用字符串的内容(在本例中为“name”)以进一步用作标签("string cannot be converted to label"
)。我一直在寻找一些解决方案,但没有找到任何解决方案。
所以我想问一下,有没有办法,如何将字符串转换为标签或任何其他有助于在这种情况下的方式?
由于
答案 0 :(得分:0)
您需要为每条记录创建一个新的Label
并将其添加到您的窗格中:
private Pane pane = ... // Or group or some other form of a container
private void button_load(ActionEvent event) {
try{
String host = "jdbc:sqlite:C://app/app.sqlite";
Connection con = DriverManager.getConnection(host);
PreparedStatement pst = null;
String SQL = "select * from labels";
pst=con.prepareStatement(SQL);
ResultSet rs=pst.executeQuery();
while(rs.next()){
Label label = new Label();
String name=rs.getString("Name");
Double Y=rs.getDouble("Y");
Double X=rs.getDouble("X");
String Text=rs.getString("Text");
label.setLayoutX(X);
label.setLayoutX(Y);
label.setText(Text);
label.setId(name);
pane.getChildren().add(label);
}
} catch (SQLException ex){
Logger.getLogger(app.class.getName()).log(Level.SEVERE, null, ex);
}
}
我不确定您在名称下存储的内容,我的猜测是它可能是节点的id
。