Как включить полосу прокрутки при переполнении в JPanel? - PullRequest
0 голосов
/ 28 мая 2019

Я не хочу показывать данные из базы данных в табличном формате, поэтому я попробовал что-то похожее на то, что вы видели в коде. Я добавил новые JPanel контейнеры, состоящие из кнопки и метки каждый раз, когда запись извлекается из базы данных. Но из-за большого объема данных панели переполняются, но опция прокрутки не включается.

Я пытался использовать JScrollPane много раз, но ни один из способов не помог мне.

public class Test2 extends javax.swing.JFrame {

    private Connection con;
    private Statement st;
    private ResultSet rt;
    public int PageId = 8236;

    /**
     * Creates new form Test2
     */
    public Test2() {
        initComponents();

        this.setLocationRelativeTo(null);
        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");
            con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521","practice","perfect");
            st = con.createStatement();

            int height = 100;
            int width = sc.getWidth();
            int x = 0;
            int y = 0;

            ResultSet rs=st.executeQuery("select id, firstname || ' ' || lastname, salary from employee");
            while(rs.next()){
                JPanel g = new JPanel();
                g.setBounds(x, y, width, height);
                g.setBackground(Color.yellow);
                JLabel l = new JLabel(rs.getString(1));
                JLabel l1 = new JLabel(rs.getString(2));
                JLabel sal = new JLabel(rs.getString(3));
                JButton b = new JButton("View profile");
                b.addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent evt) {
                        JOptionPane.showMessageDialog(sc, "Clicked!!");
                    }
                });
                g.add(l);
                g.add(l1);
                g.add(b);
                sc.add(g);

                y += (height + 10);
            }
        }   
        catch(Exception e){
            JOptionPane.showMessageDialog(this, "Can't connect", "connection error", JOptionPane.ERROR_MESSAGE);
            System.out.println(e.getMessage());
        }
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
        sc = new javax.swing.JPanel();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        sc.setAutoscrolls(true);

        javax.swing.GroupLayout scLayout = new javax.swing.GroupLayout(sc);
        sc.setLayout(scLayout);
        scLayout.setHorizontalGroup(
            scLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 252, Short.MAX_VALUE)
        );
        scLayout.setVerticalGroup(
            scLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 483, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(sc, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(sc, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    /**
     * @param args the command line arguments
     */
    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(Test2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Test2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Test2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Test2.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 Test2().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JPanel sc;
    // End of variables declaration                   
}

1 Ответ

0 голосов
/ 28 мая 2019

Я не хочу показывать данные из базы данных в табличном формате

Почему?Исходя из предоставленного вами кода, результат будет выглядеть ужасно.Вы создаете несколько меток на основе текста.Это означает, что размер каждой метки может быть разным, что означает, что расположение каждой метки в нескольких строках будет случайным и не выровненным.

Если вам нужна кнопка в столбце таблицы, проверьте: Столбец кнопки таблицы .

панели переполняются, но опция прокрутки не включена.

sc.setAutoscrolls(true);

Это не то, как вы добавляете прокрутку к компоненту.Компонент должен быть добавлен в JScrollPane:

JPanel scrollingPanel = new JPanel();
scrollingPanel.setLayout(...);
scrollingPanel.add(...);
scrollingPanel.add(...);

getContentPane.add(new JScrollPane(scrollingPanel), BorderLayout.CENTER);
pack();

Обратите внимание, я никогда не использовал SpringLayout.Я предлагаю вам научиться создавать GUI вручную, чтобы не зависеть от среды IDE, сгенерировавшей ваш код.Будет легче понять и поддерживать код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...