Pull to refresh

Live guide по созданию приложения на Java

Примерно со старшей школы меня сначала поверхностно, а потом все сильнее и сильнее, стало захватывать программирование. Поначалу это были банальные программки на Паскале, от которого я, впрочем, очень скоро отказался в пользу плюсов. Постепенно мой интерес нарастал и я стал прорешивать полуолимпиадные-полуобучающие задачки с применением различных довольно простеньких алгоритмов по типу бинарного поиска или обхода в глубину с некоторыми модификациями.

Примерно в это же время у меня возникла идея создать свое приложение для организации своего времени: условный прототип ежедневника. Да, довольно простенькая идея, но все же. Тогда у меня так и не дошли руки до написания программы. Зато дошли сейчас.

Так вот. Для написания этого самого приложения я решил изучить язык Java. Несмотря на то, что у меня к нему есть некое предубеждение (когда-то давно я начинал его учить и мне показалось, что в нем слишком длинные и непонятные названия методов, да и вообще все сложно), потребность в кроссплатформенности (почему бы приложение не запускать еще и на ПК без лишних приседаний?) вернула меня на путь изучения Java.

Для чего я все это пишу? Хочу делиться своим путем, своими ошибками, своим ходом мыслей в процессе создания приложения. Возможно, кому-то это поможет, кто-то в комментариях поделится чем-то интересным на этот счет, да и в процессе формулирования мыслей пройденное усвоится лучше).

С чего начать?


Лично мне очень тяжело было изучать C++ по книгам. Во многом потому, что я получал большой объем теории, но почти никак не подкреплял это написанием программ. Во многом потому, что просто не понимал, где это все мне может пригодиться. В результате куча времени была потрачена, а большая часть инфы в голове так и не засела.

Поэтому я решил немного поменять подход. Теперь я руководствуюсь четырьмя пунктами:

  1. Формулируем цели и понимаем, что нужно на начальном этапе.
    Например, я хочу написать программу-ежедневник. Я хочу, чтобы у меня была полноценное приложение с графикой, а не просто консольное нечто, поэтому мне точно понадобятся всякие окна, панели, кнопки и т.д.
  2. Продвигаемся к цели методом проб и ошибок. Например, я хочу создать окно. Ищу в интернете необходимую библиотеку, подключаю ее, создаю это окно.
    После этого вспоминаем работу с окнами в Windows/Linux и пытаемся сделать это через код. Условно, установить определенный размер и запретить его изменение.
  3. Включаем свою любознательность. Пытаемся переставлять строки местами, менять параметры и запускать после этого программу, подмечать, что поменялось
  4. Пишем комментарии к коду. Вот прям обязательно. Долгое время сам не использовал комментарии, но с ними гораздо удобнее: можно сэкономить много времени, не спрашивая «что здесь вообще происходит», ну и просто немного разгрузить мозг, освободив его «оперативку», записав мысль словами

Через практику, особенно интересную, и визуальное восприятие суть всяких функций, их устройство и прочие фичи усваиваются лучше. Поэтому придумайте действительно интересную вам(!) и, возможно, полезную уже сейчас программу и познавайте язык в процессе ее написания.

Первый шаг — Окна


Начать я решил именно с графики, а не с написания алгоритмов. Не знаю, насколько это практично, но меня к ней очень тянет.

Тем не менее, еще до того, как я дошел до окон, у меня возник вопрос: можно ли создавать несколько классов внутри одного файла? Не по принципу матрешки (класс в главном классе).
Оказалось, что да.

Основной класс, в котором также содержится main, должен иметь такое же название, как и имя файла. Насколько я понимаю, обычно приложение состоит из многих файлов, поэтому основной класс должен быть открыт для доступа из других фалов, то есть иметь тип public. Остальные же классы создаются без public и private перед ключевым словом class и доступны они только в том файле, в котором их объявили.

Так вот, можно, наконец, перейти к окнам.

Окно в Java обозначается как JFrame. Если переводить на русский, то получится что-то типа «java — окно». Находится окно в библиотеке javax.swing.

Код по созданию нового окна выглядит примерно так:

import javax.swing.JFrame;

public class Car {
     public void main(String[] arg) {
         JFrame new_frame = new JFrame("name of frame");
     }
}

class Bicycle {
}

Что мне очень нравится в Java, так это понятные названия методов. Например, догадайтесь, что делают следующие методы?:

import javax.swing.*;
import java.awt.*;

public class MainWindow {
    public static void main(String[] args) {
        Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
        JFrame main_frame = new JFrame("new window");
        main_frame.setVisible(true);
        int frame_width = 500, frame_height = 300;
        main_frame.setBounds((size.width - frame_width) /2,
                                          (size.height - frame_height)/2,
                                          frame_width, frame_height);
        main_frame.setResizable(false);
    }
}

А вот тот же код с пояснениями:

import javax.swing.*;//* импортирует все объекты, которые есть в библиотеке
import java.awt.*;//нужна для того, чтобы было можно узнать размер экрана

public class MainWindow {
    public static void main(String[] args) {
        Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
        /*узнаем размер экрана,
          возвращает пару значений
          длина-ширина*/

        JFrame main_frame = new JFrame("new window");
        //новое окно с заголовком "new window"

        main_frame.setVisible(true); 
        //метод позволяет визуализировать окно (если флаг true)

        int frame_width = 500, frame_height = 300; 
        //задаем исходные размеры нашего окна

        main_frame.setBounds((size.width - frame_width) /2,
                                          (size.height - frame_height)/2,
                                          frame_width, frame_height); 
        /*задает положение окна на экране
           первые два параметра отвечают за
           расположение окна по горизонтали и
           вертикали, а вторые за размеры самого  окна*/

        main_frame.setResizable(false); 
        /*метод фиксирует размер окна, то есть блокирует изменение его размера*/
    }
}

На сегодня это все. Получилось не так много, но, надеюсь, информативно.

Всем желания кодить и хороших компиляторов.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.