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

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

如何訪問 JMenu 上的項(xiàng)目并使用 Action Listener?

如何訪問 JMenu 上的項(xiàng)目并使用 Action Listener?

天涯盡頭無女友 2021-12-10 10:24:46
我的 java 代碼遇到了一個(gè)問題,其中動(dòng)作偵聽器不起作用。我應(yīng)該創(chuàng)建一個(gè) GUI,它有一個(gè)菜單欄,當(dāng)點(diǎn)擊這些按鈕時(shí),它會(huì)執(zhí)行一些操作。例如,如果用戶選擇“Meals”菜單上的一個(gè)選項(xiàng)和“Dorms”菜單上的一個(gè)選項(xiàng),它應(yīng)該計(jì)算這些項(xiàng)目中的每一個(gè)分配的值,然后輸出到總成本 JField。這就是我的代碼的樣子private class MenuActionListener implements ActionListener {//The user has chosen a new dorm or new meal plan//Get the choices from the dormBox and mealBox and recalculate charges//Display the new charges in the totalField  public void actionPerformed(ActionEvent arg0) {    //Get the choices from the dormBox and mealBox    int totalCost;    int dormIndex = menu.getComponentCount();    int dormCost=dormCosts[dormIndex];    int mealIndex=dorm.getComponentCount();    int mealCost=mealCosts[mealIndex];    //Calculate the charges    totalCost=dormCost+mealCost;    //Display the new charges     totalField.setText("$"+Integer.toString(totalCost));  }}我應(yīng)該如何讓它運(yùn)行良好..?
查看完整描述

2 回答

?
蝴蝶不菲

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

不要編寫試圖猜測要使用的正確值的偵聽器。當(dāng)您向特定組件注冊(cè)偵聽器時(shí),您已經(jīng)知道它是哪個(gè)組件,因此您可以注冊(cè)一個(gè)偵聽器,為該組件做正確的事情。


在這種情況下,當(dāng)成本存儲(chǔ)在數(shù)組中時(shí),還應(yīng)該有一個(gè)相應(yīng)的數(shù)組用于構(gòu)建菜單項(xiàng),它允許構(gòu)建項(xiàng)和相應(yīng)的偵聽器。


例如


static String[] dorms  = { "Allen Hall", "Pike Hall", "Farthing Hall" };

static int[] dormCosts = {           10,          20,              40 };

static String[] meals  = { "7 / weak", "14 / week", "unlimited" };

static int[] mealCosts = {          5,           8,          15 };

JTextField totalField = new JTextField();

int dormCost = dormCosts[0];

int mealCost = mealCosts[0];


void updateTotalCosts() {

    int totalCost = dormCost + mealCost; // really plus not multiply?

    totalField.setText("$" + totalCost);

}


JMenuBar buildMenu() {

    final JMenuBar mb = new JMenuBar();

    JMenu menu = mb.add(new JMenu("Meals"));

    for(int ix = 0; ix < meals.length; ix++) {

        int currMealCosts = mealCosts[ix];

        menu.add(meals[ix]).addActionListener(ev -> {

            mealCost = currMealCosts;

            updateTotalCosts();

        });

    }

    menu = mb.add(new JMenu("Dorms"));

    for(int ix = 0; ix < dorms.length; ix++) {

        int currDormCosts = dormCosts[ix];

        menu.add(dorms[ix]).addActionListener(ev -> {

            dormCost = currDormCosts;

            updateTotalCosts();

        });

    }

    return mb;

}

在每次循環(huán)迭代中,我們已經(jīng)知道我們正在創(chuàng)建哪個(gè)項(xiàng)目以及與它相關(guān)的成本,因此我們使用這些成本注冊(cè)一個(gè)監(jiān)聽器。


如果您不能使用 lambda 表達(dá)式,則構(gòu)造方法的前 Java 8 變體將如下所示


JMenuBar buildMenu() {

    final JMenuBar mb = new JMenuBar();

    JMenu menu = mb.add(new JMenu("Meals"));

    for(int ix = 0; ix < meals.length; ix++) {

        final int currMealCosts = mealCosts[ix];

        menu.add(meals[ix]).addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent ev) {

                mealCost = currMealCosts;

                updateTotalCosts();

            }

        });

    }

    menu = mb.add(new JMenu("Dorms"));

    for(int ix = 0; ix < dorms.length; ix++) {

        final int currDormCosts = dormCosts[ix];

        menu.add(dorms[ix]).addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent ev) {

                dormCost = currDormCosts;

                updateTotalCosts();

            }

        });

    }

    return mb;

}


查看完整回答
反對(duì) 回復(fù) 2021-12-10
?
ABOUTYOU

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

恐怕這種方法行不通。您無法從 ActionListener 內(nèi)部訪問您的 UI 組件。

您可能想嘗試向 JMenuItems 添加匿名偵聽器,以更新類的屬性以執(zhí)行計(jì)算。

編輯:檢查 Holger 的答案以獲得一個(gè)不錯(cuò)的解決方案:)

通過這種方式,您可以訪問外部組件或更好地將其委托給模型類。見這里:https : //www.codejava.net/java-core/the-java-language/java-8-lambda-listener-example


查看完整回答
反對(duì) 回復(fù) 2021-12-10
  • 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)