Member 12767173 Ответов: 0

Включение моего пользовательского combobox в другое приложение.


У меня есть приложение, которое позволяет пользователю выбрать 2 варианта из 2 comboboxes, а затем информация из базы данных выводится в jtable. Недавно в качестве эксперимента я создал два пользовательских поля со списком, сделал отдельный пакет и класс только для пользовательских полей со списком, чтобы посмотреть, будет ли это работать. Это сработало. Следующий шаг - получить это пользовательское поле со списком, чтобы заменить общее поле со списком swing из моего текущего приложения (где я просто перетаскиваю поле со списком на интерфейс swing в netbeans.

Это пользовательское поле со списком:


public class CustomComboBoxDemo extends JPanel {
    ImageIcon[] images;
    String[] colorStrings = {"    White", "Off-White", "    Peach", "     Gray",
        "       Tan", "       Pink", "     Green", "        Red", "    Yellow",
    "    Purple", "  Orange","   Brown", "    Black", "    Clear" };

 
    public CustomComboBoxDemo() {
        super(new BorderLayout());

       
        images = new ImageIcon[colorStrings.length];
        Integer[] intArray = new Integer[colorStrings.length];
        for (int i = 0; i < colorStrings.length; i++) {
            intArray[i] = new Integer(i);
            images[i] = createImageIcon(colorStrings[i] + ".png");
            if (images[i] != null) {
                images[i].setDescription(colorStrings[i]);
            }
        }

        
        JComboBox colorList = new JComboBox(intArray);
        ComboBoxRenderer renderer= new ComboBoxRenderer();
        renderer.setPreferredSize(new Dimension(120, 100));
        colorList.setRenderer(renderer);
        colorList.setMaximumRowCount(7);

        
        add(colorList, BorderLayout.PAGE_START);
        setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
    }

    
    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = CustomComboBoxDemo.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
                return null;
        }
    }

  
    private static void createAndShowGUI() {
        
        JFrame.setDefaultLookAndFeelDecorated(true);

        
        JFrame frame = new JFrame("CustomComboBoxDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       
        JComponent newContentPane = new CustomComboBoxDemo();
        newContentPane.setOpaque(true);
        frame.setContentPane(newContentPane);

       
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    class ComboBoxRenderer extends JLabel
                           implements ListCellRenderer {
        private Font uhOhFont;

        public ComboBoxRenderer() {
            setOpaque(true);
            setHorizontalAlignment(CENTER);
            setVerticalAlignment(CENTER);
        }

     
        public Component getListCellRendererComponent(
                                           JList list,
                                           Object value,
                                           int index,
                                           boolean isSelected,
                                           boolean cellHasFocus) {
            
            int selectedIndex = ((Integer)value).intValue();

            if (isSelected) {
                setBackground(list.getSelectionBackground());
                setForeground(list.getSelectionForeground());
            } else {
                setBackground(list.getBackground());
                setForeground(list.getForeground());
            }

            
            ImageIcon icon = images[selectedIndex];
            String color = colorStrings[selectedIndex];
            setIcon(icon);
            if (icon != null) {
                setText(color);
                setFont(list.getFont());
            } else {
                setUhOhText(pet + " (no image available)",
                            list.getFont());
            }

            return this;
        }

       
        protected void setUhOhText(String uhOhText, Font normalFont) {
            if (uhOhFont == null) { 
                uhOhFont = normalFont.deriveFont(Font.ITALIC);
            }
            setFont(uhOhFont);
            setText(uhOhText);
        }
    }
}




и это код из приложения, которое работает и где я хотел бы заменить текущие поля со списком на пользовательские поля со списком из предыдущего кода.


public class NewJFrame extends javax.swing.JFrame {
    
  
    public NewJFrame() {
        initComponents();
       
   
    }


    
   
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
      DefaultTableModel model = new DefaultTableModel();
                
                
                
       
           String sqlQuery = "select COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5, COLUMN6 from APP.DATA123 "
+ "where (COLUMN1 = ?) AND (COLUMN2 = ?) AND (COLUMN3 = ?) OR (COLUMN2 = ?) AND (COLUMN3 = ?)";

                         

            String abc = jTextField2.getText();
            String cba = (String)jComboBox1.getSelectedItem();
            String cab = (String)jComboBox2.getSelectedItem();
            String data = "jdbc:derby://localhost:1527/sample";
        try (
              Connection conn = DriverManager.getConnection(
              data, "app", "app");
              PreparedStatement st = conn.prepareStatement(sqlQuery))   { 
            
          
          
          Class.forName("org.apache.derby.jdbc.ClientDriver");
          st.setString(1, abc);
          st.setString(2, cba);
          st.setString(3, cab);       
          st.setString(4, cba);
          st.setString(5, cab);
          ResultSet rec = st.executeQuery();
          jTable1.getColumnModel().getColumn(6).setCellRenderer(new ImageRenderer());
          jTable1.setModel(DbUtils.resultSetToTableModel(rec));
       
               st.close(); 
 
    
            } catch (SQLException s)  {
          System.out.println("SQL Error: " + s.toString()  + " "
                  + s.getErrorCode() + " " + s.getSQLState());
      } catch (Exception e) {


}
}
          System.out.println("Error: " + e.toString()
          + e.getMessage());    public static void main(String args[]) {
      
           

      
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton2;
    private javax.swing.JComboBox<String> jComboBox1;
    private javax.swing.JComboBox<String> jComboBox2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTable jTable1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField2;
                    
}



Я попробовал несколько разных способов, но ни один из них не сработал. Каков самый простой способ добавить это поле со списком в приложение?

Кроме того, как побочный вопрос, в netbeans обычно есть вкладка проекты, вкладка файлы и вкладка службы слева. Я не уверен, что я сделал, но теперь у меня есть только вкладка "файлы", а других вкладок нет, одна из которых содержала мою базу данных............... могу я получить их обратно?? :(

Что я уже пробовал:

Я попытался вызвать создание нового класса в коде.

Suvendu Shekhar Giri

Дает ли это какую-либо ошибку?

Member 12767173

Когда я запускаю пользовательский комбо-бокс в своем собственном пакете/классе, он отлично работает, как и при запуске приложения с помощью универсальных комбо-боксов от перетаскивания комбо-бокса в swing-дизайн. Просто я не уверен, как включить поле со списком в том, что приложение, а снять родовое выпадающие списки.

0 Ответов