Включение моего пользовательского 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-дизайн. Просто я не уверен, как включить поле со списком в том, что приложение, а снять родовое выпадающие списки.