2 回答
TA贡献1836条经验 获得超4个赞
您的代码中有几个错误:
您不应该扩展
JFrame
,请参阅扩展 JFrame 与在程序中创建它不要调用布局管理器将负责定位您的
setBounds(...)
组件不要在行与行之间或打开/关闭大括号之后/之前留下太多额外的空间,
{}
这样会变得难以阅读不要作为类名调用
Button
,它可能与java.awt.Button
类混淆。
它不显示其文本,它应该执行的操作也不会发生
在这个类中:
public class Button extends JButton {
private String actionName;
public Button(String actionName) {
this.actionName = actionName;
JButton button = new JButton();
button.setText(actionName);
button.setSize(30, 30);
button.setBounds(5, 5, 25, 25);
button.addActionListener(new Evt(this.actionName));
}
}
您从中扩展JButton
,然后在其中创建一个JButton
内部!所以,你有 2 JButtons
,一个来自类(继承的)和你在其中创建的一个。但是您将文本设置为内部创建的文本,但您将另一个文本(没有文本)添加到您的JFrame
.
用一个比喻来说,就像:
你在页面上写了一些东西
你得到一个新的白页并将它添加到你的书中,而不是将你写的那个添加到你的书中。
无需JButton
在您当前的程序中进行扩展,因此只需创建一个新JButton
实例即可。
否则,如果您真的想使用自定义JButton
类,请执行以下操作:
public class MyCustomButton extends JButton { // Change class name
private String actionName;
public MyCustomButton(String actionName) {
super(actionName); //Sets the text
this.actionName = actionName;
button.addActionListener(new Evt(this.actionName));
}
}
TA贡献1862条经验 获得超6个赞
您实际上不需要创建 JButton 的子类,因为您没有向它添加任何特定属性。相反,您应该能够使其以这种方式工作:
public class HomeFrame extends JFrame{
private static final String BUTTON_ACTION_NAME = "myActionName";
public HomeFrame(String title) {
super(title);
this.setLayout(new FlowLayout(FlowLayout.CENTER));
JButton test = new JButton();
test.setText(BUTTON_ACTION_NAME);
test.setSize(30, 30);
test.setBounds(5, 5, 25, 25);
test.addActionListener(new Evt(BUTTON_ACTION_NAME));
Container cont = getContentPane();
cont.add(test, BorderLayout.CENTER);
}
}
添加回答
举报