如下程序段生成如图红框内的输出:
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
下方?
最佳答案
您可以通过将 itemPanel
的 LayoutManager
更改为 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 时有没有办法删除边和