【问题标题】:Is there a simpler way to write this Java GUI window code?有没有更简单的方法来编写这个 Java GUI 窗口代码?
【发布时间】:2012-08-18 04:26:36
【问题描述】:

我正在研究仅显示全屏颜色并循环显示其他颜色的代码。有一条线我一直盯着看

getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false), "ESCAPE");

这允许您按“Esc”并退出它(我认为 getRootPane() 与 JButton 相关联?)。但是有没有更有效的方法来编码呢?可以拆分成多行吗?

【问题讨论】:

  • 它可以分成很多行,但这并不能提高效率。您只是想让它更易于阅读吗?
  • @MichaelMrozek - 是的,就是这样!

标签: java swing io


【解决方案1】:

你的意思是这样的:

InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
KeyStroke escapeStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false);
inputMap.put(escapeStroke, "Escape");

虽然这看起来更具可读性,但我认为这不会为当前实现增加任何效率。

【讨论】:

  • 这实际上会降低效率,因为它必须创建这些类的实例并保留它们,直到垃圾收集结束。
  • @RileyE - InputMapKeyStroke 的实例被创建,无论您是否将它们分配给任何东西。如果没有创建实例,JVM 将如何将它们作为参数(或接收器)传递给方法调用?对这些对象的引用也存储在根窗格中,因此在此调用结束时不能对它们进行 GC。唯一可能效率较低的是编译器可能会在堆栈上分配 2 个额外的插槽来保存本地引用,当方法返回时,它们只会在恒定时间内弹出。
  • 对不起。我起晚了。我的意思是指针。它仍然必须在垃圾收集中遍历它们。它并不是真正的性能打击,但它仍然是一些东西。
猜你喜欢
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 2021-12-15
相关资源
最近更新 更多