gpt4 book ai didi

java - 访问和更改放置在 JDialog 上的组件的大小

转载 作者:行者123 更新时间:2023-12-02 03:26:32 25 4
gpt4 key购买 nike

我创建了一个模态 JDialog(正确地说,是 JDialog 的子级),并在用户单击 JFrame 上的 JButton 时将其设置为可见。为了确保 JDialog 上的内容垂直居中,我重写了 setVisible() 方法,并在调用 super.setVisible(true) 之前执行一些操作。这里的问题是,如果对话框设置为模态,则在调用 setVisible(true) 之前,放置在对话框上的组件的大小不大于 0。 setVisible() 也会阻止执行。

有任何关于如何绕过/解决此问题的建议/提示吗?

示例代码:

public class SampleDialog extends JDialog {

protected JPanel contentPane;

public SampleDialog() {
super();

setLayout(new BorderLayout());
setDefaultCloseOperation(HIDE_ON_CLOSE);
setModal(true);

JPanel headerPane = new JPanel();
headerPane.setBackground(Color.GREEN);
add(headerPane, BorderLayout.NORTH);

contentPane = new JPanel();
contentPane.setBackground(Color.WHITE);
add(contentPane, BorderLayout.CENTER);

JPanel footerPane = new JPanel();
footerPane.setBackground(Color.YELLOW);
add(footerPane, BorderLayout.SOUTH);

contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
contentPane.add(new JLabel("Code"));
contentPane.add(new JTextField());
contentPane.add(new JLabel("Password"));
contentPane.add(new JPasswordField());
contentPane.add(new JButton("Login"));
}

@Override
public void setVisible(boolean b) {
/*
* Get total height of all components added to 'contentPane'
* Place Box.createVerticalStrut() before and after the 'contentPane' components,
* so the input fields look like they are centered vertically
* !!! Cannot determine size of any component because it is not rendered
*/
super.setVisible(b);
}
}

enter image description here

最佳答案

to make sure the content on the JDialog is vertically centered i've overriden the setVisible()

您不应该为此重写 setVisible() 。

要使组件居中,请使用适当的布局管理器。

例如,要使组件垂直和水平居中,您可以使用 GridBagLayout:

JDialog dialog = new JDialog();
dialog.setLayout( new GrigBagLayout() );

JPanel panel = new JPanel(...);
panel.add(...);
dialog.add(panel, new GridBagConstraints());

关于java - 访问和更改放置在 JDialog 上的组件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38805294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com