Добрый день
Я работаю над проектом, который должен рассчитать производительность насоса для определенных параметров, таких как вращение, количество ступеней, диаметр и вязкость.Сначала я создал базу данных с использованием PostgreSQL с несколькими коммерческими насосами.База данных содержит схемы компаний, которые производят насосы, в каждой схеме есть таблицы, представляющие различные серии насосов, а таблицы имеют несколько насосов, организованных в виде линий.Строки содержат коэффициенты, представляющие насосы и необходимые для расчета производительности.
Я пытался закодировать приложение на C ++, но было слишком сложно подключиться к Postgre, поэтому я закончил работу с Java и Netbeans (Думаю, новичкам легче).Приложение работает довольно хорошо, но я обнаружил две проблемы, которые не могу решить.
Чтобы выбрать насос для расчетов, мне пришлось использовать два Jcombobox и Jlist.Первый Jcombobox предназначен для выбора производителя, второй - для выбора серии.Наконец, Jlist отображает все насосы в этой серии, так что пользователь может выбрать один.
Я смог заполнить первый Jcombobox схемами базы данных (спасибо вам, ребята, на самом деле), второй стаблицы схемы выбраны в первом и Jlist с названиями насосов.
Первая проблема заключается в том, что я не могу очистить второй Jcombobox (первый ряд) после смены выбранного производителя в первом Jcombobox, он будет добавлять больше при каждом изменении первого Jcombobox, даже если я-выберите элемент, который уже был выбран.Я попытался использовать команду «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);
}
Спасибо всем.