java - JList 未显示在 JScrollPane 上

标签 java mysql sql swing jlist

我正在为一家家族企业制定一个计划,该计划将管理其原 Material 供应商的小册子。我发现您需要所有代码,所以我将其发布在 Pastebin 上。 http://pastebin.com/Gc3aLe10

而且,我在这里附上我认为问题所在的地方:

tnBuscar.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {

            String search = searchField.getText();
            Connection con = null;
            java.sql.Statement st = null;
            ResultSet rs = null;

            String url = "jdbc:mysql://localhost:3306/";
            String db = "FAVEGA";
            String driver = "com.mysql.jdbc.Driver";
            String user = "root";
            String pass = "";
            try {
                Class.forName(driver);
                con = DriverManager.getConnection(url + db, user, pass);
                con.setAutoCommit(false);
                st = con.createStatement();
                String sql = "SELECT * FROM catalogos WHERE id = '" + search + "' OR name LIKE '%" + search + "%' OR keywords LIKE '%" + search + "%'";
                rs = st.executeQuery(sql);
                while (rs.next()) {
                    final String resultName = rs.getString("name");
                    buffer.add(resultName);
                }
            } catch (ClassNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }finally{
                btnEditar.setVisible(true);
                btnReiniciar.setVisible(true);
                final JList list = new JList(buffer.toArray());         
                final JScrollPane scrollPane = new JScrollPane(list);
                scrollPane.add(list);
                scrollPane.setViewportBorder(new LineBorder(new Color(0, 0, 0)));
                scrollPane.setBounds(67, 195, 269, -143);
                buscarPanel.add(scrollPane);                    
                list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                list.setBounds(0, 0, 435, 240);

                scrollPane.setPreferredSize(new Dimension(70, 80));
                list.setLayoutOrientation(JList.VERTICAL);
                buscarPanel.invalidate();
                buscarPanel.validate();
                btnEditar.addActionListener(new ActionListener(){
                    public void actionPerformed(ActionEvent e) {
                        if(list.getSelectedValue() != null){
                            String selectedValue = (String) list.getSelectedValue();
                            tab.setSelectedIndex(2);
                            btnReiniciar.addActionListener(new ActionListener(){
                                public void actionPerformed(ActionEvent e) {
                                scrollPane.setVisible(false);
                                btnEditar.setVisible(false);
                                btnReiniciar.setVisible(false);
                            }
                            });
                }
                    }
                });
            }
        }
    });

此按钮搜索我的数据库中的项目,但它运行时不加载 JList。问题是什么? PS:没有运行时错误,没有堆栈跟踪。

最佳答案

  1. 不要重新创建整个 GUI,

  2. 使用XxxListModel而不是删除并将 JComponents 添加到 JPanel

  3. XxxModel must be done on EDT 的所有更新

  4. finally block 总是被触发,但不是创建GUI的正确位置

  5. 如果您从已可见的组件中删除然后添加 JComponent,则必须调用 revalidate()repaint() 容器

关于java - JList 未显示在 JScrollPane 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11441963/

相关文章:

java - 适用于 Android 的 SQLite 数据库持久存储

java - 什么是NullPointerException,我该如何解决?

php - 通过单击链接而不重定向用户来发送 AJAX 请求

MySQL 有 2 个表

sql - 如何使用 Group by 和 Sum 更新表

Java Swing 不显示 Unicode 字符

Java Streams 在减少后对值进行排序

mysql - 将 int-timestamp 转换为时间戳(同时更新行)

mysql - 如何使用 RLIKE 在两个表中进行搜索,其中一个表可以为空

mysql - App Engine 中的 GoLang 动态 SQL 查询