1 回答
TA贡献1777条经验 获得超3个赞
最初的问题是您initComponents
提前调用,即在应用您想要的尺寸之前调用。pack
因此,在组件方法中调用initComponents
可将面板缩小到最小尺寸。
之后您更改了对话框的大小(通过调用setSize(w,h)
),但这并没有直接影响所涉及的组件。但是,当对话框设置为visible
组件时,组件会自动调整以适合定义的尺寸。这不适用于您的列大小,因为您没有定义ComponentListener
会触发此操作的列大小(请参阅下面的第二个示例)。
update
这导致第一次单击按钮来考虑组件的调整大小,因此它们被应用到列。
要解决不同大小的问题,请将构造函数中的方法调用更改为
(下面进一步介绍构造函数的完整示例):
int w = (int) (Math.round(d.getWidth()) / 2);
int h = (int) (Math.round(d.getHeight()) / 2);
setPreferredSize(new Dimension(w, h));
initComponents();
setSize(new java.awt.Dimension(0, 0));
您可能想从您的方法中删除initComponents()
。
如果您想在用户手动调整对话框大小时保持列大小,请考虑添加 a ComponentListener
,作为另一个示例,请检查此answer
.
这也可以用作原始代码的替代解决方案,但首先正确定义大小可能会更清晰。
public Test(Dimension d) {
int w = (int) (Math.round(d.getWidth()) / 2);
int h = (int) (Math.round(d.getHeight()) / 2);
setPreferredSize(new Dimension(w, h));
initComponents();
setLocationRelativeTo(null);
bUpdate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cargarProductos();
}
});
this.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
cargarProductos();
}
});
}
添加回答
举报