7

按钮类:

class SubmitButton extends JButton implements ActionListener {
    public SubmitButton(String title){
        super(title);
        ....

我在哪里声明:

SubmitButton submit = new SubmitButton("Submit");
submit.setBounds(530+150, 200, 100, 25);

super(title) 如何将String title 设置为按钮的标题?它与常规 JButton 的方法 .setText() 有何相同之处?

换句话说,调用 super() 如何与 .setText() 做同样的事情 super() 如何知道更改标题?.setText() 是 JButton 类中唯一将字符串作为参数的方法吗?

4

6 回答 6

23
  • SubmitButton 扩展 JButton
  • JButton 有一个构造函数,可能看起来像这样(简化):

    public JButton(String title) {
        setText(title);
    }
    
  • SubmitBUtton 有一个构造函数:

    public SubmitButton(String title) {
        super(title);
    }
    

SubmitButton 构造函数调用超类 (JButton) 构造函数,而后者又调用 setText。现在在内部,JButton 的工作方式可能不同,但效果是一样的。

总体要点是 super(...) 调用超类构造函数。

于 2008-12-20T03:49:38.843 回答
7

JButton 是一个支持多个构造函数的中央 Java Swing 类。这些构造函数之一允许您设置按钮标签的文本。

添加 super(title) 实际上并没有进行调用 - 无论如何都会调用父级的构造函数,但它有助于选择调用哪个构造函数。

setText() 操作允许您在按钮创建之后但(通常)在显示之前更改文本。

于 2008-12-20T03:46:52.673 回答
4

当使用构造函数 SubmitButton(String title) 初始化 SubmitButton 时,您可以使用标题调用父/超类构造函数。如果你没有指定 super(title),那么 Java 编译器会自动插入代码来调用超类的默认构造函数。然后在创建 SubmitButton 时不会设置标题。

此外,超类 (JButton) 可能在其构造函数中使用 .setText(string),这就是它执行相同功能的原因(需要查看实际的 Java 源代码)。

http://www.javaworld.com/jw-10-2000/jw-1013-constructors.html?page=2
http://leepoint.net/notes-java/oop/constructors/constructor.html

于 2008-12-20T03:49:25.710 回答
2

在 java 中的所有情况下,“调用”都会super()调用父类的 ctor。像所有函数一样,当您调用 ctor 时,Java 模式匹配名称和参数类型。 JButton声明一个带有字符串参数的 ctor,因此当您调用时super(title),效果是您正在调用采用单个字符串参数的直接超类 (JButton) 的构造函数。

于 2008-12-20T03:52:53.657 回答
1

http://java.sun.com/javase/6/docs/api/javax/swing/JButton.html#JButton(java.lang.String)

(复制粘贴整个 URL;由于某种原因,字符串部分未链接)

它正在调用上面链接的 JButton 类中定义的构造函数,它将按钮的文本设置为传入的字符串。 super() 是对超类构造函数的调用。

于 2008-12-20T03:45:01.317 回答
0

我个人通过设置标题而不是文本来解决这个问题。

static String TitleName = "一些标题"; 超级(标题名称);

然后在你的按钮或任何应该发生动作的地方。

setTitle("新标题");

这对我有用。:-)

于 2015-12-14T15:04:18.510 回答