Как сразу положить элементы разных размеров друг на друга? - PullRequest
3 голосов
/ 19 февраля 2020

Следующий сегмент программы генерирует вывод в красном поле, как показано на рисунке:

st = c.con.createStatement();
rs = st.executeQuery("SELECT itemName, itemMaxQty, itemImage FROM item");

while(rs.next()){
    JPanel itemPanel = new JPanel();

    itemPanel.setLayout(new BoxLayout(itemPanel, BoxLayout.PAGE_AXIS));
    JPanel componentPanel = new JPanel();
    componentPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

    JLabel itemName = new JLabel(rs.getString(1));
    ImageIcon itemImage = new ImageIcon(rs.getString(3));
    Image scaleImage = itemImage.getImage().getScaledInstance(120, 120, Image.SCALE_SMOOTH);
    JLabel imageHolder = new JLabel(new ImageIcon(scaleImage));
    JSpinner quantityField = new JSpinner();
    Dimension d = quantityField.getPreferredSize();
    d.width = 60;
    d.height = 30;
    quantityField.setPreferredSize(d);

    componentPanel.add(imageHolder);
    componentPanel.add(quantityField);
    itemPanel.add(componentPanel);
    itemPanel.add(itemName);

    add(itemPanel);
}

program output

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

У меня на самом деле две проблемы здесь.

Во-первых, я не понимаю, почему значение itemName (подставка для кекса, chafers, et c) центрировано.

1. Как сделать так, чтобы он был по центру так, чтобы он был выровнен с соответствующим изображением вверху?

Во-вторых, как вы можете видеть, между компонентной панелью есть большое пространство (изображение и JSpinner). ) и itemName. Я думаю, это потому, что высота, выделенная для itemName, такая же, как и для componentPanel. Итак

2. Как сделать itemName сразу под componentPanel?

...