Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将不同大小的元素立即放置在彼此的顶部?_Java_Swing_Jlabel_Layout Manager_Boxlayout - Fatal编程技术网

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组件的放置。