setSize JPanel после инициализации - PullRequest
1 голос
/ 24 мая 2011

Я ввожу ResultSet, чтобы показать содержимое моей таблицы. Дело в том, что хотя результаты показывают, что я пытался изменить размер JPanel, чтобы он отображался после заполнения. Я попытался использовать setSize(300, y) в цикле while(ResultSet.next), а также попробовал его вне цикла. но ничего не дает.
Вот мой код:

package SimpleCRUD;

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class ShowContactsFrame extends JFrame {
    GridBagLayout layout = new GridBagLayout();
    GridBagConstraints Constraint = new GridBagConstraints();
    JLabel lblFname, lblLname, lblPhoneNumber;
    Statement st;
    String showAll = "SELECT * FROM `contacts`.`contacts`;";
    ResultSet rt;
    int y = 0;

    public ShowContactsFrame() {
        super("Contact List");
        try {
            AppCRUD initCRUD = new AppCRUD();
            rt = initCRUD.DBhandle.createStatement().executeQuery(showAll);

        } catch (Exception ex) {
            ex.printStackTrace();
        }

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel panel = new JPanel(layout);
        add(panel);
        getContentPane().add(panel, BorderLayout.NORTH);

        lblFname = new JLabel("lblFname");
        lblLname = new JLabel("lblLname");
        lblPhoneNumber = new JLabel("lblPhoneNumber");

        Insets inset = new Insets(10, 10, 10, 10);

        Constraint.insets = inset;

        try {
            while (rt.next()) {
                Constraint.gridx = 0;
                Constraint.gridy = y;
                panel.add(new JLabel(rt.getString(2)), Constraint);
                Constraint.gridx = 1;
                Constraint.gridy = y;
                panel.add(new JLabel(rt.getString(3)), Constraint);
                Constraint.gridx = 2;
                Constraint.gridy = y;
                panel.add(new JLabel(rt.getString(4)), Constraint);
                y++;
                panel.setSize(300, y);
            }

        } catch (Exception ex) {

            ex.printStackTrace();
        }
        JOptionPane.showMessageDialog(null, y);

    }

}

Ответы [ 2 ]

3 голосов
/ 24 мая 2011

Если вы хотите установить размер панели, вы должны использовать setPreferredSize() вместо setSize(), как показано ниже.

panel.setPreferredSize(new Dimension(300, 300));
frame.pack();
frame.setVisible(true);

Вы должны сделать это таким образом, так как компонент управляетсяменеджером по расположению и поэтому он игнорирует вызовы setSize().Который затем используется, только если вы setLayout() равны нулю, т.е. вы не используете менеджера.

1 голос
/ 24 мая 2011

Я хотел бы предложить, чтобы вы вызывали pack () в JFrame после того, как вы создали элементы GUI и задали размеры.

...