第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java/Swing JButton 不顯示其文本且不執(zhí)行其操作

Java/Swing JButton 不顯示其文本且不執(zhí)行其操作

qq_笑_17 2023-01-05 10:13:15
我想寫一個(gè)簡單的過馬路紅綠燈系統(tǒng)。我想制作一個(gè)按鈕來啟動(dòng)整個(gè)程序(打開交通燈系統(tǒng)的 GUI)。但是我的第一個(gè)按鈕已經(jīng)開始出問題了。它不顯示其文本,它應(yīng)該執(zhí)行的操作也不會(huì)發(fā)生。我真的是一個(gè)初學(xué)者所以它可能是一些愚蠢和明顯的錯(cuò)誤但是請(qǐng)看看我會(huì)很高興^^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);    }}這將是生成的按鈕,它不做它應(yīng)該做的事情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 類,它應(yīng)該負(fù)責(zé)執(zhí)行動(dòng)作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函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

您的代碼中有幾個(gè)錯(cuò)誤:

  1. 您不應(yīng)該擴(kuò)展JFrame,請(qǐng)參閱擴(kuò)展 JFrame 與在程序中創(chuàng)建它

  2. 不要調(diào)用布局管理器將負(fù)責(zé)定位您的setBounds(...)組件

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

  4. 不要作為類名調(diào)用Button,它可能與java.awt.Button類混淆。

它不顯示其文本,它應(yīng)該執(zhí)行的操作也不會(huì)發(fā)生

在這個(gè)類中:

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

    }

}

您從中擴(kuò)展JButton,然后在其中創(chuàng)建一個(gè)JButton內(nèi)部!所以,你有 2 JButtons,一個(gè)來自類(繼承的)和你在其中創(chuàng)建的一個(gè)。但是您將文本設(shè)置為內(nèi)部創(chuàng)建的文本,但您將另一個(gè)文本(沒有文本)添加到您的JFrame.

用一個(gè)比喻來說,就像:

  • 你在頁面上寫了一些東西

  • 你得到一個(gè)新的白頁并將它添加到你的書中,而不是將你寫的那個(gè)添加到你的書中。

無需JButton在您當(dāng)前的程序中進(jìn)行擴(kuò)展,因此只需創(chuàng)建一個(gè)新JButton實(shí)例即可。

否則,如果您真的想使用自定義JButton類,請(qǐng)執(zhí)行以下操作:

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

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-01-05
?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊

您實(shí)際上不需要?jiǎng)?chuàng)建 JButton 的子類,因?yàn)槟鷽]有向它添加任何特定屬性。相反,您應(yīng)該能夠使其以這種方式工作:


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

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-01-05
  • 2 回答
  • 0 關(guān)注
  • 349 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)