gpt4 book ai didi

java - 无法在 ActionListener 中添加 GridBagLayout

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:02:09 25 4
gpt4 key购买 nike

我有一个 JMenuItem 和一个 ActionListener,在这个 ActionListener 中我想添加一个 GridBagLayout 到我的frame(它可能有也可能没有已添加的内容 Pane - 出于测试目的它没有)然后将 components 添加到该 frame . 框架的设计独立运行,但我想从JMenuItem上的ActionListener触发它,并且这是我遇到问题的地方。它不会从 ActionListener 内部显示。我已经尝试从 AL 的类中的不同方法运行相同的代码,但也没有用。

当我完全注释掉 ActionListener 时,我要测试的 JLabel 会在正确的位置添加到 GBL 中,并且系统打印 我的 debugherehere2编译器 没有发现任何语法错误。这会产生所需的结果,并打印标签。 (请参阅下面的图像,了解当我完全注释掉 AL 时发生的情况。)有问题的代码片段(我的 JFrame 在哪个框架中)如下:

enter image description here

// (frame created, menus added, etc.) ...
JMenuItem vPoke1Item = new JMenuItem("Pokemon 1");
vPoke1Item.setActionCommand("poke1");
viewMenu.add(vPoke1Item);

//Setup GBL to view stats for Pokemon 1
vPoke1Item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
// debug output
System.out.println("here");

// Set up the content pane
frame.getContentPane().removeAll();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
Container pane = frame.getContentPane();
pane.setLayout(gbl);

// Make a StatCalcObject (all my labels/fields are already initialized)
StatCalc1 sc1 = new StatCalc1();

// Add it to pane
gbc.gridx = 0;gbc.gridy = 0;gbl.setConstraints(sc1.speciesL, gbc);
pane.add(sc1.speciesL);
frame.revalidate();
frame.repaint();

// debug output
System.out.println("here2");
}
});
// (etc.)

现在,当我运行这段代码时,我仍然会打印调试行“here”和“here2”,所以它告诉我 ActionListener 运行良好。但是标签没有出现。编译器仍然没有发现语法错误。所以我在这里挠头。我究竟做错了什么?我希望这段代码足以理解问题,但如果您想要完整的代码,我可以提供。

最佳答案

假设你使用的是固定大小的窗口,如果你更换一切都会工作

frame.revalidate();
frame.repaint();

pane.invalidate();
pane.validate();

pack();

如果你没有固定大小的框架。请注意,JFrame 或容器不支持重新验证。更换也比较好

gbl.setConstraints(sc1.speciesL, gbc);
pane.add(sc1.speciesL);

pane.add(sc1, gbc);

更好的代码风格。

关于java - 无法在 ActionListener 中添加 GridBagLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13004436/

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