下午好
我正在巫婆的一个项目上工作,我必须针对某些参数(例如旋转,级数,直径和粘度)计算泵的性能。最初,我使用带有多个商用泵的PostgreSQL创建了一个数据库。该数据库包含与制造泵的公司相同的模式,在每个模式中,都有代表不同系列泵的表,并且这些表具有按行组织的多个泵。这些行包含代表泵的系数,并且是计算性能所必需的。
我试图用C ++编写应用程序代码,但是由于很难与Postgre连接,所以我结束了Java和Netbeans的工作(我认为对新手来说更容易)。到目前为止,该应用程序运行良好,但是我发现了两个无法解决的问题。
要选择泵进行计算,我必须使用两个Jcombobox和一个Jlist。第一个Jcombobox用于选择制造商,第二个用于选择系列。最后,Jlist显示该系列中的所有泵,以便用户可以选择一个。
我能够用数据库的模式(实际上是感谢你们)填充第一个Jcombobox,第二个用在第一个中选择的模式的表填充,第二个用泵的名称填充Jlist。
第一个问题是,在第一个Jcombobox中更改选定的制造商后,我无法清除第二个Jcombobox(系列一个),即使我重新选择一个Jcombobox,每次更改它也会添加更多itens。已经选择的项目。我尝试使用命令“ removeAllItems()”,但随后仅显示一个表并停止填充Jcombobox。
第二个问题是,当我在第二个Jcombobox中选择一个系列时,它不会立即在Jlist中显示泵,Jlist在我选择了另一个系列之后开始移动。因此,我必须选择一个然后更改为另一个,以便泵开始出现在Jlist中。
很长的文字和英语错误,我很抱歉,希望你们能理解。我知道代码不是很漂亮,这是因为我还不太擅长于此,所以我急着要交付它。
这里是代码,没有所有Netbeans生成的代码。
public final class LabPump extends javax.swing.JFrame {
Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;
public LabPump() {
initComponents();
con = ConnectPump.connect();
FillSelectFabricante();
}
public void FillSelectFabricante(){
try {
rs = con.getMetaData().getSchemas();
while(rs.next()){
String schemas = rs.getString("TABLE_SCHEM");
if(schemas.equals("information_schema") || schemas.equals("pg_catalog")){
}
else{
selectFabricante.addItem(schemas);
}
}
}
catch(SQLException error){
JOptionPane.showMessageDialog (null,error);
}
}
public void FillSelectSerie(String fabricante){
//selectSerie.removeAllItems();
try {
String[] sql = {"TABLE"};
rs = con.getMetaData().getTables(null, fabricante, "%", sql);
while(rs.next()){
String tables = rs.getString(3);
selectSerie.addItem(tables);
}
}
catch(SQLException error){
JOptionPane.showMessageDialog (null,error);
}
}
public void FillListBomba(String fabricante, String serie){
DefaultListModel dlm = new DefaultListModel();
dlm.removeAllElements();
try{
String sql = "select * from " + fabricante + "." + serie;
pst = con.prepareStatement(sql);
rs = pst.executeQuery();
while(rs.next()){
String bomba = rs.getString("bomba");
dlm.addElement(bomba);
}
listBomba.setModel(dlm);
}
catch(SQLException error){
JOptionPane.showMessageDialog (null,error);
}
}
private void selectSerieActionPerformed(java.awt.event.ActionEvent evt) {
selectSerie.addActionListener((ActionEvent e) -> {
String fabricante = selectFabricante.getSelectedItem().toString();
String serie = selectSerie.getSelectedItem().toString();
FillListBomba(fabricante, serie);
});
}
private void selectFabricanteActionPerformed(java.awt.event.ActionEvent evt) {
String fabricante = selectFabricante.getSelectedItem().toString();
FillSelectSerie(fabricante);
}
谢谢大家。
答案 0 :(得分:0)
我刚刚设法解决了这个问题。当selectSerie.removeAllItems()
行未注释时,程序返回一个NullPointerException
错误。
为解决该问题,我使用了DefaultComboBoxModel
类,然后使用了RemoveAllElements()
方法。我不太确定为什么其他方法无效。
感谢您的时间和帮助Peter。
public void FillSelectSerie(String fabricante) {
DefaultComboBoxModel box;
box = new DefaultComboBoxModel();
box.removeAllElements();
try {
String[] sql = {"TABLE"};
rs = con.getMetaData().getTables(null, fabricante, "%", sql);
box.addElement("-");
while (rs.next()) {
String tables = rs.getString(3);
box.addElement(tables);
}
selectSerie.setModel(box);
} catch (SQLException error) {
//JOptionPane.showMessageDialog (null,error);
}
}