【问题标题】:Name convention on Java Swing components(prefix)Java Swing 组件的命名约定(前缀)
【发布时间】:2011-01-22 19:53:31
【问题描述】:

在 Java 中使用 Swing 进行编程时,我想到的一个问题是,它是关于 Swing 组件的推荐还是“官方”/最常用的命名约定(前缀)。

例如(尽管其他人可能更喜欢其他命名约定,这是我目前使用的):

  • JTextField 的txt
  • 用于 JButton 的 btn
  • 用于 JLabel 的 lbl
  • JPanel 的 pnl

但是我的列表结束了..

我认为这样的前缀增强了我的代码的可读性,但是我没有任何组件的名称,例如 JComboBox、JList、JRadioButton、JCheckButton 等等。

提前致谢。

【问题讨论】:

  • Swing 没有“官方”命名约定。
  • 闻起来像匈牙利符号

标签: java naming-conventions


【解决方案1】:

人们会告诉你使用前缀是不好的,因为那是匈牙利表示法,而现在,匈牙利表示法在编程中被认为是一个很大的禁忌。就我个人而言,作为一个做过一定量 GUI 工作的人,我可以告诉你,虽然在非 GUI 编程中绝对应该避免使用匈牙利符号,但在做 GUI 时这是一个非常好的做法。

例如,考虑一个带有用于输入用户名的文本框的简单表单。在这个文本框前面应该是一个标签,提示用户在文本框中输入他的名字。现在,您将如何命名文本框? '姓名'?标签呢? 一个好的做法应该是在文本框前面加上 txt,在标签前面加上 label,这就是匈牙利符号的意义所在。因此,文本框现在命名为“txtName”,相应的标签命名为“lblName”。这为您提供了额外的好处,即在您的 IDE 编辑器中轻松访问您的文本框、组合框和其他小部件。例如,在 Eclipse 中键入“txt”并按 CTRL+Space 会打开一个上下文菜单,其中列出了所有文本框,如果您遵循此表示法。

现在,回答你的问题。定义前缀应该使用的三个字母的常用方法是从小部件名称中删除所有元音以及所有重复的辅音。如果剩下的辅音多于三个,则应忽略它们。因此,文本框(或 TextField,或您首选的小部件工具包中调用的任何此小部件)变为“txt”、标签“lbl”、组合框“cmb”、表格“tbl”等等。

【讨论】:

  • 所以你会为 JCheckButton 使用“chc”?我在问,因为我可能更喜欢“chb”,否则我永远不会知道它是什么意思。对于我能想到的其他组件,它应该可以正常工作。
  • 我必须同意。 Gui 组件是唯一从我这里得到 btn_XXX、pnl_XXX、chk_XXX 处理的变量。一方面,它帮助我在视觉上将 GUI 变量与状态/数据变量区分开来。但是……由于达菲提到的原因,我觉得这样做有点肮脏。
  • 我不确定为什么有人会对主观问题的意见答案投反对票。
  • @maartinus - 按照惯例,重复的辅音也被删除,复选框类型小部件的前缀应该是 'chk'。
  • @Adam - 我会选择你提出的(txtf / txta),或者可能是 txf 和 txa。
【解决方案2】:

我通常讨厌这种东西,因为它带有匈牙利符号的味道。我不喜欢在变量名称中嵌入类型的想法,因为如果您更改类型,它不应该强制更改所有变量名称。

但在 Swing 的情况下,我想这是可以接受的。

一个好的 IDE 会为你生成变量名。为什么不让它?如果您坚持,我也会拼出类型(例如 submitButton 而不是 btnSubmit)。击键很便宜。

【讨论】:

  • 是的,你有一些我会带走的好点,谢谢!
【解决方案3】:
  • btn - JButton
  • chk - JCheckBox
  • clr - JColorChooser
  • cmb - JComboBox
  • ico - JDesktopIcon
  • edt - JEditorPane
  • fch - JFileChooser
  • ifr - JInternalFrame
  • lbl - JLabel
  • lyp - JLayeredPane
  • lst - JList
  • mnu - JMenuBar
  • mni - JMenuItem
  • 选择 - JOptionPane
  • pnl - JPanel
  • pmn - JPopupMenu
  • prg - JProgressBar
  • rad - JRadioButton
  • 腐烂 - JRootPane
  • scb - JScollBar
  • scr - JScrollPane
  • spr - JSeparator
  • sld - JSlider
  • spn - JSpinner
  • spl - JSplitPane
  • 选项卡 - JTabbedPaneJTable
  • tbl - JTable
  • tbh - JTableHeader
  • txa - JTextArea
  • txt - JTextField
  • txp - JTextPane
  • tgl - JToggleButton
  • tlb - JToolBar
  • tlt - JToolTip
  • tre - JTree
  • vpr - JViewport

来源-:http://zuskin.com/java_naming.htm

【讨论】:

    【解决方案4】:

    为什么不直接调用 JTextField textField、JButton button、JLabel label 和 JPanel panel。花几个额外的字符让变量读起来像英文单词有那么糟糕吗?

    此外,当我将类型放入变量名时,我将其放在最后。所以显示名称的 JLabel 是 nameLabel(IMO 比 lblName 更具可读性)。

    此外,按照 duffymo 的建议,将类型放在变量名中是不好的做法。更好的方法是描述变量是什么。在名称标签的情况下,它是一个显示名称的 UI 组件。所以更好的名字可能是nameComponentnameComponent 是 JLabel 或其他类型的事实是次要的,不应使变量名称混乱。

    【讨论】:

    • 请参阅我的分析器,了解为什么使用前缀比使用后缀更好(将类型放在末尾)。
    • @Sandman 您在回答中没有提及后缀。您指出的是,使用前缀总比不使用要好。但我可以对后缀说同样的话。示例:nameTextFieldnameLabel
    • @Andrew 当然,您可以使用后缀。但是,请阅读我的答案第二段中的最后两句话,我解释了使用前缀而不是后缀的好处。
    • @Sandman 你是对的,但我可以输入name、Ctrl+Space 并获取所有与name 连接的ui 变量。一个好处是我不需要记住我用于 name 的 UI 组件(TextField 还是其他?)。
    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多