【问题标题】:How to get a copy of a JComponent?如何获取 JComponent 的副本?
【发布时间】:2017-07-16 17:03:21
【问题描述】:

我创建了一个javax.swing.JButton,用于退出。如何将按钮的精确副本(重复)复制到另一个 JFrame

private JButton signOut;    

public JButton getBtn(){
    //Any idea?
}

return signOut; 不是一个选项,因为那样当我调用setBounds()setVisible()signOut 时它会搞砸主页。

我是否必须使用按钮创建类的新对象才能仅获取此组件?还是有其他解决方案?

【问题讨论】:

  • 你不能'return signOut',因为你只是复制对原始按钮对象的引用。 JButton的定义中是否有拷贝构造函数?
  • "如何获取 JComponent 的副本?" 副本还是实例?请注意,由于 JComponent 只能有一个父容器,因此“复制”没有多大意义。
  • @tmarwen 因为我已经做了一些设计.. 设置字体、图标等...所以如果我可以在不重新编写整个代码的情况下获得对象的副本会容易得多.. .
  • @AndrewThompson 不是实例。对象的副本。
  • 您可能不想要副本或副本。我喜欢 Jeremy 的回答:创建一个方法并将代码放入该方法中以创建按钮。如果您能向我们展示更多代码或描述为什么您想要一份副本,将会有所帮助;我觉得这是一个XY problem,可能有比尝试复制按钮更好的解决方案。

标签: java swing jframe jbutton jcomponent


【解决方案1】:

将该按钮的构建抽象为某种工厂或功能。这样,您不必经常手动重新配置按钮,也不必担心复制/克隆(这会变得非常混乱)

public JButton createButton(string caption) {
   //Create button here
}

【讨论】:

  • 是的……我就是这么做的。但我想知道是否有更简单的方法......因为当你使用像 netbeans 这样的 IDE 时你不能这样做。它不会让你更改代码。好主意,谢谢。
  • 我认为找到某种方法来复制 JButton可能就编写代码而言更容易,但就其实际所做的而言,它肯定更复杂且不那么干净以及意图是什么。有时最好保持简单。在netbeans中,你可以修改框架代码来添加一个函数。
  • “当你使用像 netbeans 这样的 IDE 时,你不能这样做” 这在 Netbeans 中当然是可能的,所以在你弄清楚如何之前,最好避免被被 IDE 绊倒了。
【解决方案2】:

好的,您可以复制该按钮并粘贴到另一个面板中。回到旧框架。复制该按钮代码。回到下一帧。单击按钮操作并将其粘贴。 ☺

【讨论】:

    猜你喜欢
    • 2015-01-01
    • 2019-10-18
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多