java - 如何将不同大小的元素立即放在彼此之上?

如下程序段生成如图红框内的输出:

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 的值(Cupcake Stand、chafers 等)居中。

1。如何使它居中,使其与顶部的相应图片对齐?

其次,如您所见,在 componentPanel(图片和 JSpinner)和 itemName 之间有一个很大的空间。我认为这是因为为 itemName 分配的高度与为 componentPanel 分配的高度相同。所以

2。如何使 itemName 紧接在 componentPanel 下方?

最佳答案

您可以通过将 itemPanelLayoutManager 更改为 BorderLayout(使用 itemPanel.setLayout(new BorderLayout( ));), 并以这种方式将组件添加到 itemPanel:

itemPanel.add(componentPanel, BorderLayout.CENTER);
itemPanel.add(itemName, BorderLayout.SOUTH);

https://stackoverflow.com/questions/60293470/

相关文章:

node.js - 如何以只读模式获取Draft js中的链接?

linux - 将.net core 3.1 Web应用部署到Azure Linux应用服务

typescript - TypeScript 中的非破坏性类型断言

swift - 您可以将键盘快捷键绑定(bind)到 Xcode 中的换行吗?

html - 什么决定了 Firefox 中的滚动条是否有颜色?

java - 当我使用 ContextHierarchy 时,没有类型为 'org.springfr

ruby-on-rails - jbuilder 空数组删除键

django - 使用 DjangoFilterConnectionField 时有没有办法删除边和

google-cloud-platform - Terraform 0.12 使用模板创建入口规则

android - 蓝牙扫描设备,频繁扫描后无法写入设备