gpt4 book ai didi

java - SetVisible(false) 更改面板中组件的布局

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:51:40 26 4
gpt4 key购买 nike

当我将其中一个子面板设置为不可见时,如何使主面板中的子面板保持原样?

我的样子:

[ (Panel1) (Panel2) (Panel3) (Panel4) ]

当我执行 panel3.setVisible(false) 时,它看起来像:

[      (Panel1) (Panel2) (Panel4)     ]

我希望它看起来像:

[ (Panel1) (Panel2)          (Panel4) ]

我正在使用 GridBagLayout,我的 mainPanel 声明如下所示:

final JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();

然后我添加一个新面板,例如:

final JTextField valueTextField = new JTextField();
valueTextField.setPreferredSize(new Dimension(80, 25));
valueTextField.setName("Value");
c.gridx =0;
panel.add(valueTextField, c);

如果需要,我会提供更多代码,我不关心我使用哪种布局,只要它能满足我的需求即可。

最佳答案

我建议使用 CardLayout在单个单元格中,而不是将其设置为不可见,而是切换到一个空面板。

下面的代码演示了这一点。在 hidePanel() 中,有两个选项可以隐藏当前启用了 CardLayout 路由的单元格。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class InvisiblePanels {
public static void main(String... args) throws Exception {
JFrame frame = new JFrame();
frame.setLayout(new GridBagLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
frame.add(new MyPanel(), c);
c.gridx = 1;
frame.add(new MyPanel(), c);
c.gridx = 2;
frame.add(new MyPanel(), c);

frame.pack();
frame.setVisible(true);

}

private static class MyPanel extends JPanel {

CardLayout layout;

public MyPanel() {
layout = new CardLayout();
setLayout(layout);
JButton button = new JButton("Click me");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
hidePanel();
}
});
add(button, "visible");
add(new JPanel(), "invisible");
layout.show(this, "visible");
}

public void hidePanel() {
// setVisible(false);
layout.show(this, "invisible");
}
}
}

关于java - SetVisible(false) 更改面板中组件的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6141321/

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