Изчистване на много полета в GUI TextField Java

Ticketa

Registered
Правя една програма (задача) по проект на Java и имам решение, което си направих да изчиствам полетата

Обаче... струва ми се много дълъг вариант, който съм избрал като опция:

Java:
// метод за изчистване на полета
public void clearFields() {
    trademarkTextField.setText("");
    priceTextField.setText("");
    weightTextField.setText("");
    sizeTextField.setText("");
    ramTextField.setText("");
    phoneNoTextField.setText("");
    topicTextField.setText("");
    downloadTextField.setText("");
    displayNoTextField.setText("");
}

Дали няма някакъв друг вариант, с който да съкратя кода?
 
Това ти е решението. Всякакви динамични неща, които се опиташ да измислиш в един момент ще ти стъжнят живота. Бъди експлицитен.
Да, то и решението, което може би ще свърши работа, ако го арайнеш няма да излезе по-малко код. Да спестиш най-много 2-3 реда. :)
 
@Revelation благодаря.
@Blinky благодаря
Оставям го по този начин.

Странно, че при една от функциите получавам следната грешка (за първи път);

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: class Mobile cannot be cast to class Mp3 (Mobile and Mp3 are in unnamed module of loader 'app')
at GadgetShop.downLoadMusic(GadgetShop.java:216)
at GadgetShop.actionPerformed(GadgetShop.java:367)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2313)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased


След дебъгване и т.н. установих проблемните редове:
Java:
Mp3 ourMp3 = (Mp3) gadgetList.get(displayNumber);
ourMp3.downloadMusic(downloadSize);

Имам подобен код, който "извиква" друг клас Mobile като към Mobile имам extends Gadget същият е принципа и в Mp3 и работи безпроблемно.

Java:
Mobile ourMobile = (Mobile) gadgetList.get(displayNumber);
    ourMobile.MakeCall(phoneNumber, duration);
 
Последно редактирано:
А това е целият (проблемния метод)

Java:
public void downLoadMusic() {
    int downloadSize = getDownloadSize();
    int displayNumber = getDisplayNo();
    if ( (displayNumber != -1) && (displayNumber < gadgetList.size()) ) {
        Mp3 ourMp3 = (Mp3) gadgetList.get(displayNumber);
        ourMp3.downloadMusic(downloadSize);
        JOptionPane.showMessageDialog(frame, "Download performed check console");
    } else {
        JOptionPane.showMessageDialog(frame, "Invalid display no");
    }
}


Mp3 ourMp3 = (Mp3) gadgetList.get(displayNumber);
ourMp3.downloadMusic(downloadSize);
 
А Mp3 наследява ли Mobile? Изглежда не, и затова е грешката. Виж дали displayNumber не е с грешна стойност.
 
Mp3 наследява Gadget тъй като Mobile и Mp3 зависят от Gadget

Mp3 extends Gadget
Mobile extends Gadget

Ползвам супер клас
 
Ами ти сам си отговори на въпроса. Mp3 не е Mobile следователно няма как да кастнеш Mobile към Mp3.

Даже като чета не виждам как Mobile може да има нещо общо с Mp3.
Gadget изглежда е нещо, което придава супер глобален контекст за типа, но двата индивидуални класа нямат нищо общо.
Ако имаха щеше да наследиш Mobile към Mp3 и отново щеше да наследяваш Gadget.

Изясни си логиката.

П. П. Download е една дума съответно е грешно да се паскализира на думата load ( downLoad - no no). На места е написано вярно на друго не. Бъди консистентен с наименованията.
 
А това е целият (проблемния метод)

Java:
public void downLoadMusic() {
    int downloadSize = getDownloadSize();
    int displayNumber = getDisplayNo();
    if ( (displayNumber != -1) && (displayNumber < gadgetList.size()) ) {
        Mp3 ourMp3 = (Mp3) gadgetList.get(displayNumber);
        ourMp3.downloadMusic(downloadSize);
        JOptionPane.showMessageDialog(frame, "Download performed check console");
    } else {
        JOptionPane.showMessageDialog(frame, "Invalid display no");
    }
}


Mp3 ourMp3 = (Mp3) gadgetList.get(displayNumber);
ourMp3.downloadMusic(downloadSize);
Сега се вгледах в кода тук. Изглежда gadgetList е списък от Gadget обекти, с които обаче работиш, сякаш са конкретно Mp3-та – казваш
Код:
(Mp3) gadgetList.get(displayNumber);
. Защо не обърнеш тогава самото gadgetList да бъде mp3List от тип List<Mp3>, вместо List<Gadget> ?
 
Цялото кастване предполага лош дизайн. Означава, че списъка от гаджети може да съдържа обекти, които нямат нищо общо помежду си, съответно не се знае на дадения индекс какво има и накрая всичко се омесва и излиза от контрол.

Като цяло не ми харесва как е написан метода. Той трябва просто да сваля музика, а в същото време прави валидация на нещо, което не е свързано с метода и това е проверка размера на списъка с гаджети. Изкарай тази логика другаде и подавай нужния гаджет като параметер вместо да караш метода да си го търси.

Малко е трудно да се предположи за какво говорим тук понеже не знаем в какъв клас се намира този метод и какви са задълженията на този клас.
 

Back
Горе