gpt4 book ai didi

java - JSplitPane 不绘画更正

转载 作者:行者123 更新时间:2023-11-30 10:39:58 24 4
gpt4 key购买 nike

在我的应用程序中,我有一个显示 JSplitPaneJFrame,拆分为 VERTICAL_SPLIT。顶部显示一个JLabel,底部显示一个JInternalFrame。出现两个问题。

  1. 正在显示 JLabel,但未显示 JInternalFrame

    2。我必须调整应用程序的大小才能完全显示 JSplitPane

我认为这都与 JSplitPane 的不正确使用有关。但是,我一直无法弄清楚是什么。我可以就此问题提供一些帮助吗?

附注我已运行测试以确保 GUIWindow.getInsideFrame() 不会返回 nullinstanceof 最后的检查表明 Pane 中的两个组件都存在并且属于该类型。非常感谢您的帮助:

protected static void newWindow(GUIFrame window) {
SwingUtilities.invokeLater(new Runnable(){

@Override
public void run() {
JSplitPane pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
JInternalFrame intFrame = window.getInsideFrame();
pane.setRightComponent(intFrame);
pane.setLeftComponent(new JLabel(window.getDescription()));
synchronized(lock){
frame.remove(currentPane);
frame.add(pane);
}
synchronized(lock){
frame.revalidate();
pane.setVisible(true);
frame.repaint();
if(window instanceof ColourFrameShower) return;
currentWindow = window;
currentPane = pane;
currentFrame = intFrame;
}
if(pane.getLeftComponent() instanceof JLabel) System.out.println("JLabel exists!");
else System.out.println("JLabel does not exist!");

if(pane.getRightComponent() instanceof JInternalFrame) System.out.println("JInternalFrame exists!");
else System.out.println("JInternalFrame does not exist!");
}

});
}

编辑:我通过在第二个 synchronised(lock) block 的开头调用 frame.revalidate() 解决了问题 2。这已包含在代码中。

最佳答案

正如我在评论中告诉您的,您只需在 JInternalFrame 上使用 setVisible(true),否则 JSplitPane< 将不会考虑它.

这是 java swing 上一个非常常见的错误!

很高兴它对你有帮助;)

关于java - JSplitPane 不绘画更正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39094476/

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