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);
}
}
添加回答
舉報