【问题标题】:Swing not repainting when I run the .jar except in command prompt当我运行 .jar 时,Swing 不会重新绘制,但在命令提示符下除外
【发布时间】:2012-04-20 18:36:44
【问题描述】:

我有一个包含很多面板的项目。我有一种方法可以在卡片布局面板中切换卡片(jpanel)(见下文)。当我从我的 IDE (Netbeans) 运行它以及从命令提示符 (java -jar MyStuff.jar) 运行 jar 时,这一切都很好。但是当我双击 Jar 时,卡片会发生变化,但 repaint 不会产生不希望的结果(当我将鼠标悬停在组件上时)。如果我通过再次单击按钮再次调用该方法,它将适用。我需要立即帮助:) 谢谢!

/**
* Shows a panel by the given panel name (in the cardPanel)
*
* @param panelName
*/
private void showPanel(String panelName) {
  if (panelName.equals("revenueSources")) {
    backButtonIcon.setVisible(false);
  } else {
    backButtonIcon.setVisible(true);
  }
  currentPanelName = panelName;
  ((CardLayout) cardPanel.getLayout()).show(cardPanel, panelName);
  repaint();
  revalidate();
}

【问题讨论】:

  • 很好,如果用SSCCE编辑您的问题,这可能是个好问题@
  • SSCCE using CardLayout 无需调用repaint()revalidate() validate() 即可工作。我只能得出结论,您的代码非常错误。但我会为您的 SSCCE 保留进一步的评论。
  • 你是对的,我不使用SSCCE是错误的。我只是没有时间,几个小时后就没关系了。我将只使用 bat 文件来运行它。感谢您的帮助。
  • 当然你在 EDT 上调用这个方法?
  • 是的,有一个启动方法的按钮。

标签: java swing jar cardlayout


【解决方案1】:

(when I mouse over the components appear) 仅用于此代码交换

repaint();
revalidate();

revalidate();
repaint();

【讨论】:

  • @kentcdodds:如果它不起作用,那么您可能希望创建并发布您的sscce
  • +1,我会回答 :-),只是无法理解 OP 对 repaint()/revalidate() 的调用,在 CardLayout 中也是如此 :-)
猜你喜欢
  • 2011-08-12
  • 1970-01-01
  • 2021-08-31
  • 2014-12-16
  • 1970-01-01
  • 2016-10-14
  • 2020-03-21
  • 2015-03-28
  • 1970-01-01
相关资源
最近更新 更多