Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

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

 

Запитване за писане на красив код

Featured Replies

Целта на метода по-долу (getRadioButtonPanel()) е да създаде панел с JRadioButton-и като взима текста на всеки бутон от отделен properties файл. Това е така, защото във всеки отделен properties файл ще се съдържат различни детайли за какво прави всеки бутон.

Следния код може ли да се напише по-красиво:

private JPanel getRadioButtonPanel(String path, String dir, String key, int align, ButtonGroup group) {
        JPanel panel = new JPanel(new GridBagLayout()); // Създаване на панел
        GridBagConstraints layout = new GridBagConstraints(); // Създаване на GridBag подребда
        String buttonText = null;
        String templatesDirectory = mergeFilePath(path, dir); // path - път до текущата папка, dir - папка с properties файловете
        String[] fileList = getFilesList(new File(templatesDirectory)); // Взима списък на всички файлове в указаната папка
        Arrays.sort(fileList); // Подрежда масива по азбучен ред
        JRadioButton[] radioButton = new JRadioButton[fileList.length]; // Създава масив от JRadioButton-и с размера на броя файлове
        

        for(int i = 0; i < fileList.length; i++) {
            layout = orderLayoutAndAlign(0, i, align); // Задава подредбата на обект
            buttonText = getProperty(mergeFilePath(templatesDirectory, fileList[i]), key); // Взима текста на бутона от файл
            radioButton[i] = new JRadioButton(buttonText); // Инициализира бутон
            panel.add(radioButton[i], layout); // Добавя бутона към панела заедно с неговата подредба
            group.add(radioButton[i]); // Добавя бутона в група от бутони
        }

        return panel;
    }

Ето тук са допълнително използваните методи:

public String mergeFilePath(String path, String dir) {
        return path + File.separator + dir;
    }

public String[] getFilesList(File dir) {
        TemplatesProcessing tp = new TemplatesProcessing();

        String[] fileList = tp.getFilesList(dir);

        return fileList;
    }

// Това е методът, който се извиква от метода по-горе
public String[] getFilesList(File directory) {
        String[] files = directory.list();

        if (files == null) {
            return null;
        } 

        return files;
    }

public GridBagConstraints orderLayoutAndAlign(int x, int y, int align) {
        GridBagConstraints layout = new GridBagConstraints();

        layout.gridx = x;
        layout.gridy = y;
        layout.anchor = align;

        return layout;
    }

public String getProperty(String file, String key) {
        CommonResources resource = new CommonResources();

        return resource.getProperty(file, key);
    }

// Това е методът, който се извиква от метода по-горе
public String getProperty(String file, String key) {
        FileInputStream read = null;
        Properties properties = null;
        String property = null;

        try {
            properties = new Properties();
            read = new FileInputStream(file);

            properties.load(read);

            property = properties.getProperty(key);

            read.close();
        } catch (FileNotFoundException error) {
            error.printStackTrace();
        } catch (IOException exc) {
            exc.printStackTrace();
        }

        return property;
    }

Посоченият код е написан старателно, но може да се напише по-добре. Има правила за писане на добър код, които в някои фирми се наричат "coding standard" и трябва да се спазват задължително от програмистите. Често се използват инструменти като Checkstyle които ги налагат.

Ето някои насоки за посочения код :

  • Коментарите се пишат винаги на английски.
  • Методите трябва да бъдат предшествани от javadoc коментар, в който се описва какво прави метода и смисълът на всеки параметър (а не в тялото на метода).
  • В метода getFilesList() проверката за null e излишна.
  • Коментарите трябва да казват нещо полезно или нещо което не може да се разбере от кода. Коментари като "Създава масив от JRadioButton-и с размера на броя файлове" са безполезни/излишни.

Също така - самата идея да се описва в отделен properties файл какво прави всеки бутон... е малко странна. Може всички бутони да се опишат в един XML файл и Swing GUI-то да се конструира по това описание. Сходна идея е : XUL.

Регистрирайте се или влезете в профила си за да коментирате

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.