我想通过选择combobox项在数据库中的tableview中显示数据。组合框包含用户可以选择的“我的数据库”中的列。我这样做,组合框是好的,代码工作没有错误,但表没有更新。
控制器类:
package application;
import java.io.IOException;
import java.net.URL;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
public class SortareDupaAngajatiController implements Initializable{
final ObservableList<tableAngajati> data=FXCollections.observableArrayList();
final ObservableList<String> optiuni=FXCollections.observableArrayList();
PreparedStatement intabel=null;
ResultSet rezultate=null;
String prequery;
String postquery;
@FXML
public ComboBox<String> meniu;
@FXML
TableView<tableAngajati> tabelangajati;
@FXML
private TableColumn<tableAngajati,String> numesediucol;
@FXML
private TableColumn<tableAngajati,Integer> angajaticol;
@Override
public void initialize(URL location, ResourceBundle resources) {
comboMeniu();
insertInTabel();
}
public void comboMeniu(){
try {
String query = "SELECT * FROM maginfo";
PreparedStatement dindb = Conexiune.conexiuneBd.prepareStatement(query);
ResultSet rezultate = dindb.executeQuery();
while (rezultate.next()) {
optiuni.add(rezultate.getString("nume"));
meniu.setItems(optiuni);
}
dindb.close();
rezultate.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public void insertInTabel(){
try {
prequery="SELECT * FROM sediu where nume='"+meniu.getValue()+"'ORDER BY numarangajati DESC";
postquery=prequery;
intabel= Conexiune.conexiuneBd.prepareStatement(postquery);
rezultate=intabel.executeQuery();
while(rezultate.next()){
data.add(new tableAngajati(
rezultate.getString(2),
rezultate.getInt(7)
));
}
intabel.close();
rezultate.close();
} catch (Exception e) {
System.err.println(e);
}
numesediucol.setCellValueFactory(new PropertyValueFactory<>("numesediu"));
angajaticol.setCellValueFactory(new PropertyValueFactory<>("numarangajati"));
tabelangajati.setItems(null);
tabelangajati.setItems(data);
}}
表类:
package application; public class tableAngajati { private String numesediu; private int angajati; public tableAngajati(String numesediu, int angajati) { super(); this.numesediu=numesediu; this.angajati=angajati; } public String getNumesediu(){ return numesediu; } public void setNumesediu(String numesediu){ this.numesediu=numesediu; } public int getNumarangajati(){ return angajati; } public void setNumarangajati(int angajati){ this.angajati=angajati; } }
多谢!
FXML文件:
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.Separator?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>
<AnchorPane prefHeight="389.0" prefWidth="620.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.SortareDupaAngajatiController">
<children>
<Separator layoutX="178.0" orientation="VERTICAL" prefHeight="382.0" prefWidth="0.0" />
<Pane layoutX="-9.0" layoutY="-1.0" opacity="0.6" prefHeight="390.0" prefWidth="190.0" style="-fx-background-color: #0074D9;">
<children>
<Button layoutX="35.0" layoutY="20.0" mnemonicParsing="false" onAction="#arataHome" prefHeight="100.0" prefWidth="130.0" style="-fx-background-color: #FFF;" text="Home" />
<Button layoutX="35.0" layoutY="146.0" mnemonicParsing="false" onAction="#arataAdaugareSediu" prefHeight="100.0" prefWidth="130.0" style="-fx-background-color: #FFF;" text="Adauga sediu" />
<Button layoutX="35.0" layoutY="272.0" mnemonicParsing="false" onAction="#arataAdaugareMagazin" prefHeight="100.0" prefWidth="130.0" style="-fx-background-color: #FFF;" text="Adauga supermarket" />
</children>
</Pane>
<Label layoutX="195.0" layoutY="10.0" text="Sortare supermarket-uri dupa nr. de angajati din toate sediile" wrapText="true">
<font>
<Font name="Berlin Sans FB" size="16.0" />
</font>
</Label>
<ScrollPane layoutX="194.0" layoutY="38.0" prefHeight="304.0" prefWidth="414.0">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="361.0" prefWidth="399.0">
<children>
<TableView fx:id="tabelangajati" layoutX="1.0" layoutY="30.0" prefHeight="338.0" prefWidth="411.0">
<columns>
<TableColumn fx:id="numesediucol" prefWidth="204.0" sortable="false" text="Sedii" />
<TableColumn fx:id="angajaticol" prefWidth="193.0" sortable="false" text="Numar angajati" />
</columns>
</TableView>
<ComboBox fx:id="meniu" layoutX="100.0" layoutY="3.0" prefHeight="25.0" prefWidth="209.0" promptText="Selectati supermarket-ul" />
</children></AnchorPane>
</content>
</ScrollPane>
<Button layoutX="556.0" layoutY="354.0" mnemonicParsing="false" onAction="#Inapoi" text="Inapoi" />
</children>
</AnchorPane>
几个小时寻找答案后,我终于放弃了。我有一个包含以下组合框的FXML表单: 它注入到 JavaFX 控制器类中: 该组合显示了使用Eclipselink 2.7和JPA 2.2从嵌入式H2数据库加载的Tobra(在西班牙语中代表Tipo de Obra)列表。 我不会向用户展示Tobra的价值。toString,相反,我在初始化中设置了一个转换器: 我有一个实现<code>Task的内部类 当然,当
我刚刚创建了一个TablView,我成功地将数据放入其中。问题是当我双击一个单元格(要更新)时,它会显示更新的数据,但当我单击离开时,更新的单元格会显示旧数据! 这里的代码: 有人能帮帮我吗?厚度
我想要一个组合框,它会在用户键入时过滤列表项。它应该如下工作: 键入时,文本字段应该显示一个可能的选择,但是用户尚未键入的单词部分应该突出显示。 当他打开列表时,下拉框应该只显示可能的选项? 使用箭头键,用户应该在缩小可能的项目后选择剩余的项目之一。 过滤并不重要,跳转到第一个匹配的选择也可以。 有类似的吗?
我想在JavaFX中显示内容。下面是我用来将内容设置到表列中的代码。我遇到的问题是,它只显示一行。循环只迭代了5次:每次它都会获取的第一个值。 如果忽略行,则循环将迭代中的所有内容。
我创建了绑定到viewmodel相同属性的combobox和textblock 结果是在组合框中显示错误的selecteditem(总是第一个)。Textblock总是有正确的值。当我在combobox中选择不同的值时,textblock会正确更新。如果我移除 IsSynchronizedWithCurrentItem=“真” 然后组合框显示“空”值。语言的选择项目应该有正确的对象(通过调试)。