Следующий сегмент программы генерирует вывод в красном поле, как показано на рисунке:
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](https://i.stack.imgur.com/AAAj0.png)
Я знаю, что, возможно, некоторые части кода не лучший способ сделать это, но это то, что я могу сделать сейчас, в соответствии со своими знаниями.
У меня на самом деле две проблемы здесь.
Во-первых, я не понимаю, почему значение itemName
(подставка для кекса, chafers, et c) центрировано.
1. Как сделать так, чтобы он был по центру так, чтобы он был выровнен с соответствующим изображением вверху?
Во-вторых, как вы можете видеть, между компонентной панелью есть большое пространство (изображение и JSpinner). ) и itemName. Я думаю, это потому, что высота, выделенная для itemName, такая же, как и для componentPanel. Итак
2. Как сделать itemName
сразу под componentPanel
?