亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java/Swing JButton 不顯示其文本且不執行其操作

Java/Swing JButton 不顯示其文本且不執行其操作

qq_笑_17 2023-01-05 10:13:15
我想寫一個簡單的過馬路紅綠燈系統。我想制作一個按鈕來啟動整個程序(打開交通燈系統的 GUI)。但是我的第一個按鈕已經開始出問題了。它不顯示其文本,它應該執行的操作也不會發生。我真的是一個初學者所以它可能是一些愚蠢和明顯的錯誤但是請看看我會很高興^^package kreuzung;import java.awt.BorderLayout;import java.awt.Container;import java.awt.FlowLayout;import javax.swing.JFrame;public class HomeFrame extends JFrame{    public HomeFrame(String title) {        super(title);    this.setLayout(new FlowLayout(FlowLayout.CENTER));    Button test = new Button("noAction");    Container cont = getContentPane();    cont.add(test, BorderLayout.CENTER);    }}這將是生成的按鈕,它不做它應該做的事情package kreuzung;import javax.swing.Action;import javax.swing.JButton;public class Button extends JButton{    private String actionName;    public Button(String actionName) {        this.actionName = actionName;                       //set the Action name of this button                                     JButton button = new JButton();                     //instantiate this Button        button.setText(actionName);                         //set the Action Name as Button Text        button.setSize(30, 30);                     button.setBounds(5, 5, 25, 25);             button.addActionListener(new Evt(this.actionName));     //add an Action Listener to the button                                                             //and gets the Action from the Evt Class    }}最后但并非最不重要的是 Evt 類,它應該負責執行動作package kreuzung;import java.awt.event.*;import javax.swing.JFrame;public class Evt implements ActionListener {    private String actionName;    public Evt(String actName) {        this.actionName = actName;    }    @Override    public void actionPerformed(ActionEvent e) {        switch(actionName) {        case "noAction":            JFrame frame = new HomeFrame("Home");            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            frame.setSize(300, 400);            frame.setVisible(true);            break;        }    }}
查看完整描述

2 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

您的代碼中有幾個錯誤:

  1. 您不應該擴展JFrame,請參閱擴展 JFrame 與在程序中創建它

  2. 不要調用布局管理器將負責定位您的setBounds(...)組件

  3. 不要在行與行之間或打開/關閉大括號之后/之前留下太多額外的空間,{}這樣會變得難以閱讀

  4. 不要作為類名調用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));

    }

}


查看完整回答
反對 回復 2023-01-05
?
阿波羅的戰車

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);

    }

}


查看完整回答
反對 回復 2023-01-05
  • 2 回答
  • 0 關注
  • 338 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號