Java 如何将不同大小的元素立即放置在彼此的顶部?
以下程序段在红色框内生成输出,如图所示:Java 如何将不同大小的元素立即放置在彼此的顶部?,java,swing,jlabel,layout-manager,boxlayout,Java,Swing,Jlabel,Layout Manager,Boxlayout,以下程序段在红色框内生成输出,如图所示: 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
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);
}
我知道代码的某些部分可能不是最好的方法,但根据我所掌握的知识,这就是我现在可以做的
实际上我有两个问题
首先,我不明白为什么itemName
的值(杯形蛋糕架、金龟子等)居中
1。如何使其居中,使其与顶部对应的图片对齐?
第二,正如您所看到的,componentPanel(图片和JSpinner)和itemName之间有很大的空间。我认为这是因为为itemName分配的高度与componentPanel的高度相同。所以
2。如何使
itemName
紧靠componentPanel
?您可以通过将itemPanel
的LayoutManager
更改为BorderLayout
(使用该行itemPanel.setLayout(newborderlayout();
)来实现这一点,并以这种方式将组件添加到itemPanel
:
itemPanel.add(componentPanel, BorderLayout.CENTER);
itemPanel.add(itemName, BorderLayout.SOUTH);
我的第一个建议是将SQL与视图的构造分开。换句话说,从数据库读取数据,使用普通Java对象构建模型,然后从Java对象构建视图。至于你的实际问题,看看GridBagLayout。此布局使您能够更好地控制Swing组件的放置。