【问题标题】:Buttons Don't Initially Draw按钮最初不绘制
【发布时间】:2012-02-12 20:46:42
【问题描述】:

我的小程序存在问题,在您将鼠标悬停在按钮上之前,按钮不会绘制。之后它们会留下来,但是一旦您单击一个,它们就会再次消失。这是我的代码:

    checkPanel = new JPanel();

    buttonPanel = new JPanel();
    buttonPanel.setLayout( new GridLayout( 1, 7 ) );

    openAdvancedSettings = new JButton( "Advanced Settings" );
    openAdvancedSettings.addActionListener( this );

    checkPanel = new JPanel();
    checkvolt = new Checkbox( "Voltage", true );
    checkv = new Checkbox( "v gate", false );
    checkw = new Checkbox( "w gate", false );
    checks = new Checkbox( "s gate", false );

    checkvolt.addItemListener( this );
    checkv.addItemListener( this );
    checkw.addItemListener( this );
    checks.addItemListener( this );

    checkPanel.setLayout( new GridLayout( 20, 8 ) );
    checkPanel.add( butp );
    checkPanel.add( prompt0 );
    checkPanel.add( checkvolt );
    checkPanel.add( prompt1 );

    butt = new JButton( "Start" );
    butt.addActionListener( this );
    buttonPanel.add( butt );

    setLayout( new BorderLayout() );
    add( checkPanel, BorderLayout.EAST );
    add( buttonPanel, BorderLayout.NORTH );
    add( openAdvancedSettings, BorderLayout.SOUTH );

前 2 个添加是 JPanel,最后一个是 JButton。大多数按钮(除了最后一个)都在这 2 个面板中。

我还得出结论,repaint() 方法导致了这种情况的发生。我做错了什么?

【问题讨论】:

  • 我假设您在此处发布的代码位于 init() 方法中。不是吗?

标签: java swing applet awt


【解决方案1】:

我假设在没有好的SSCCE 的情况下,您必须未能将负责创建和显示您的 GUI 的代码放入 SwingUtilities.invokeLater(... ); 其次,您可以在调用 repaint() 之前尝试在面板上调用 revalidate() 方法。说不定可以暂时解决问题。

希望这可能会有所帮助。 问候

【讨论】:

  • 对不起,如果我让它变得更难,那么它需要,但我正在使用的代码不是我的。它也是 1800 行长,所以提取它并不容易。我意识到出了什么问题,并正在尝试修复它。感谢您的帮助!
  • @TheCOOLLOSER:欢迎您,祝您好运:-)。问候
【解决方案2】:
  • 不要混合使用 Swing(例如 JPanel)和 AWT(例如 CheckBox)组件。注释掉所有 AWT 导入并检查是否仅缺少布局。
  • 确保在添加所有组件后调用validate()
  • 正如 Gagandeep Bali 所建议的那样:- 在 EDT 上构建 GUI,如果无法对其进行排序,则发布 SSCCE。

【讨论】:

  • +1 用于指出 AWT 组件和 Swing,我忘了提及这一点。 :-) 问候
  • 很高兴与您在同一页面上回答。我只记得您是编写该 SSCCE 文档的真实人,我在回答中提供了该链接。 :-) 问候
  • @GagandeepBali 同上。我喜欢你的回答,但忍不住提到我自己的一些事情。至于 Swing/AWT 组合,我很幸运能抓住它!我通常只在代码被编译并放在我的编辑器中后才仔细查看它。 ;)
猜你喜欢
  • 2017-07-16
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 2020-06-19
相关资源
最近更新 更多