Сообщество - Задачки для изучающих Java
Задачки для изучающих Java
31 пост 1 145 подписчиков
22

Создаем программу Hello World в JavaFX в IntelliJ IDEA

Пост вольный перевод статьи:

https://www.jetbrains.com/help/idea/developing-a-javafx-hell...


Для начала создаем проект JavaFX

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Выбираем JavaFX и жмем Next

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Даем имя проекту и жмем Finish.

информация с сайта http://ru.java.wikia.com/wiki/Контроллер

Контроллер - это класс, предназначенный для непосредственной обработки запросов от клиента и возвращения результатов.

Чаще всего, в самом контроллере не описывается логика обработки данных. Создаются дополнительные, сервисные классы, которые выполняют все основные задачи по обработке данных. Задача методов в контроллере - вызов сервисных методов в нужном порядке и возвращение результатов клиенту.

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

Файл sample.fxml отвечает за интерфейс пользователя.

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Переименовываем Controller в файле Controller.java

1. Наводим на имя класса-контроллера (Controller), выбираем Refractor->Rename и меняем имя класса-контроллера:

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Жмем enter и завершаем рефракторинг. В файле sample.fxml должно было измениться имя класса контроллера: fx:controller="sample.SampleController"

Важный момент, конструкция fx:id будет использоваться часто, она означает, что мы работаем с объектом класса Controller.

Создадим кнопку в интерфейсе пользователя, для этого в файл  sample.fxml добавим следующие сточки:

<Button text="Say 'Hello World'" onAction="#sayHelloWorld"/>

<Label GridPane.rowIndex="1" fx:id="helloWorld"/>


Возможно, понадобиться руками добавить:


<?import javafx.scene.control.Button?>

<?import javafx.scene.control.Label?>

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Как видите sayHelloWorld отмечен красным цветом, а helloWorld выделен.

Введем исправления:

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Используя встроенные функции IDEA создадим поле helloWorld в файле SampleController.java

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Жмем  enter, завершаем рефракторинг.

Далее создаем функцию sayHelloWorld встроенными способами IDEA:

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Жмем enter и завершаем рефракторинг.

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Добавляем действие в функцию sayHelloWorld:

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Результат работы программы:

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост
Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Добавим стили в нашу программу.

В файл sample.fxml добавим следующий текст:

stylesheets="/sample/sample.css"

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Встроенными методами IDEA создадим файл sample.css

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

В файл sample.css добавляем текст:

.root {

-fx-background-color: gold; //Цвет заднего фона окна

}


.label {

-fx-font-size: 20; //Высота текста Hello World

}

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Результат работы программы:

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост
Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост
Показать полностью 16
10

Изучаем вместе

Добрый день, есть ли среди участников сообщества те, кто хотел бы поделиться опытом в изучении Джавы или же те, кто непосредственно занимается изучением данного языка и захотел бы к примеру сравнить свои результаты с другими (такого же уровня)?


На данный момент я изучаю Джаву по книгам, разным ресурсам и мне не хватает такой вещи как непосредственного общения с разработчиком, который мог бы сказать на что конкретно нужно делать уклон, что я делаю не так при изучении и как правильно двигаться дальше. Да и мотивировало бы это больше. Так же не помешало бы и общение с изучающими людьми, узнавать их подход.


Если кто-нибудь откликнется, будет здорово. Если это будет больше одного человека, можно было бы создать телеграм канал или что то в этом духе.


Всем добра, бобра и лучей позитива!

16

Помогите начинающему программисту JAVA

Дорогие пикабушники. Если среди вас есть программист по java, подскажите новичку как набирать опыта. т.е. требуется практика, примеры работы или участие в каком не будь проекте как новичку.


Буду благодарен

8

Небольшой разбор первого задания

При прочтении просьба не забывать, что я всего лишь кот :3

Небольшой разбор первого задания Java, Задача, Решение, Длиннопост

Объявляем класс:


class Cat {
}

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


private String name, colour;
private double weight, length, height, strength;

Конструктор по умолчанию, присваивающий стандартные значения переменным класса:


public Cat () {
name = "NoName";
colour = "Black";
weight = 6.5;
length = 1.0;
height = 0.4;
strength = 0.5 * weight * length * height;
}

Конструктор, через который мы сможем в программе присвоить свои значения переменным класса:


public Cat (String name, String colour, double weight, double length, double height)
{
this.name = name;
this.colour = colour;
this.weight = weight;
this.length = length;
this.height = height;
strength = 0.5*weight * length * height;
}

Так как имена передаваемых параметров в конструкторе совпадают с переменными класса, используется конструкция this.переменная = переменная.


Вводится функция класса, позволяющая получить имя кота. Это необходимо, так как переменные класса имеют модификатор private и доступа к ним извне нет.


public String getName () {
return name;
}

И проверка класса на работоспособность:


public static void main(String[] args)

{
Cat cat1 = new Cat();
System.out.println(cat1.getName());
Cat cat2 = new Cat("Salem", "Black", 6.5, 1.0, 0.4);
System.out.println(cat2.getName());
}

Так как классы имеют сложную структуру необходимо использовать ключевое слово new для того, чтобы для него была выделена память программой.


#comment_67980312


Программа выводит следующее:


NoName
Salem

Вручите мне мой приз, пожалуйста.)

Небольшой разбор первого задания Java, Задача, Решение, Длиннопост
Показать полностью 1
12

Когда Hello world уже не достаточно.

Привет всем кто учит какие либо языки программирования, а в особенности Java.

Я далекий от про уровня человек, но люблю на досуге писать код. И вот я не так давно (благодаря упоминанию тут), открыл для себя ресурс codewars.


Ресурс поддерживает много языков программирования, так что одни и те же задачи можно решать разными языками. Пользователи сами могут создавать задачи для других и тд.


Но причина создания не в рекламе ресурса, а том что бы найти других людей у которых хобби как у меня и вместе решать задачки, обсуждать их, а может и создавать.

Когда Hello world уже не достаточно. Java, Codewars, Программирование, Логическая задача, М
10

Интересный вопрос.

Все знаю про три закона робототехники разработанные А. Азимовым



Робот не может причинить вред человеку или своим бездействием допустить, чтобы человеку был причинён вред.

Робот должен повиноваться всем приказам, которые даёт человек, кроме тех случаев, когда эти приказы противоречат Первому Закону.

Робот должен заботиться о своей безопасности в той мере, в которой это не противоречит Первому или Второму Законам.


(Не обязательно же наличие "позитронных" мозгов, становится актуально с появлением автомобилей на автопилоте)


Но хоть один программист пытался их написать машинным или программным кодом??

7

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения.

О да, я вернулся..)

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

Проект находится по адресу: https://github.com/Norfin85/TankBattle

Вся графика реализована в файле: Graphics.java.

Открытие окна происходит через стандартную для Swing процедуру:

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

С помощью SwingUtilities.invokeLater мы помещаем создание окна в очередь событий - event dispatch thread.

Основное окно использует компоновщик BoxLayout:

frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)

и размещает панели сверху-вниз.

Внутрь окна мы помещаем две панели: MainPanel и BottomPanel, которые будут содержать более детальные блоки программы, о чем будет рассказано ниже.


Примерная структура любого окна в Swing:

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

Структура нашего окна:

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

Параметры нашего окна определяются следующими командами:

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

Структура MainPanel:

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

На первый взгляд мудрено....

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

Рассмотрим более детально.

Внутрь MainPanel помещаются три панели - LeftPanel, CenterPanel, RightPanel, для них задаются конкретные размеры с помощью функции setPreferredSize(new Dimension(X, Y)).  Дальше простая арифметика - сумма параметров по X и Y должна равняться параметрам

X и Y MainPanel.

Внутри MainPanel используется тоже компоновщик BoxLayout, но уже по оси X, размещающий панели слева-направо.

Внутрь панелей вносятся элементы. Для позиционирования элементов я выбрал способ - создание EmptyBorder(int top, int left, int bottom, int right) и задание конкретных размеров элементов через функцию setPreferredSize(new Dimension(X, Y)).


В BottomPanel помещаются две кнопки и разносятся по сторонам через:

setAlignmentX(Component.RIGHT_ALIGNMENT)

setAlignmentX(Component.LEFT_ALIGNMENT)


Внутри элементов TextPanel размещаются элементы JTextPane. Использование данных элементов позволило стилизовать текст через следующую конструкцию:

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

StyleConstants.setAlignment(simpleAttributeSet, StyleConstants.ALIGN_LEFT)- выравнивание по левому краю.

StyleConstants.setFontSize(simpleAttributeSet, 12) - размер шрифта.

StyleConstants.setFontFamily(simpleAttributeSet, "Times New Roman, cursive") - семейство шрифта.

simpleAttributeSet.addAttribute(StyleConstants.CharacterConstants.Foreground, new Color(112, 126, 173)) - цвет шрифта.


Дляотражения имеющихся танков использованы JProgressBar-ы, в дальнейшем они будут отражать промежуточные показатели здоровья танком, а не только жив-мертв.

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

setMinimum(0) - минимальное значение в прогресс баре.

setMaximum(100) - максимальное значение.

setValue(100) - текущее значение.

setString("Легкий танк СССР " + (i + 1)) - аннотация.


BattleList (JTextPane) мы помещаем внутрь JScrollBar и назначаем параметр jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS)  - чтобы всегда отражался скролл.


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


public static void setButton(String text, Boolean setActive) - меняет нашу кнопку buttom (меняет текст и делает активно/неактивной).


public static void setHealthes(Tank ussrTank, Tank germanTank) - меняет параметры здоровья в текстовых блоках слева и справа.


public static void setCurrentBattle(Tank ussrTank, Tank germanTank) - устанавливает текст текущей битвы в текстовом блоке CurrentBattle.


public static void updateFrame() - обновляем окно.


public static void updateBattleList() - обновляем battleList.


public static void startBattle() - запускает бой.


public static void setTankHealth(int id, int percent)  - устанавливает значение здоровья танка в соответствующем JProgressBar.


public static void showLog() - отображает окно лога битвы.


Лог битвы выведен на отдельную кнопку, открывающую окно лога, состоящего из JFrame и помещенного в него JScrollBar с вложенным в него JTextPane.


За сим на сегодня все..) Продолжение следует...)

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост
Показать полностью 8
5

Выполняем задание на Abstract Factory Pattern часть 1

В первой части мы создадим абстрактную фабрику танков, по одному экземпляру каждого танка и проведем бой между случайными танками СССР и Германии.

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Структура программы:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Весь код программы находится по адресу: https://github.com/Norfin85/TankBattle


Опишу лишь пару, на мой, взгляд интересных моментов.

Момент 1:

Классы LightUssrTank, MediumUssrTank, HeavyUserTank имеют различный показатель armor. Все переменные в классах имеют модификатор private, а значит объявление переменной должно происходить в классе . Но UssrFactory возвращает  объекты класса Tank, а значит поле armor будет недоступно в этих объектах. Эту проблему можно решить следующим образом:

В абстрактом классе Tank объявляется абстрактная функция getArmor:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

А в конкретных класса объявляется переменная armor и реализация функции getArmor:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Момент 2: в абстрактом классе задается конструктор, а в классе-наследнике UssrMediumTank он используется используя ключевое слово super(), при  этом класс UssrMediumTank имеет свой конструктор с большим количеством полей. Это позволяет нам объединять общие параметры для всех классов-наследников в один общий абстрактный класс.

И сама главная программа:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Программа пока очень громоздкая и не учитывает скорость стрельбы при встрече лоб в лоб. Это все будет исправлено во второй части путем создания таймера боя и очков действия танков. Также внутрь объектов будет помещена их ориентация.

И еще некоторые модификации...)

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост
Показать полностью 4
5

Необходима помощь более опытных людей (Java)

Всем доброго времени суток! Необходима помощь падавану, т.е мне. Вкратце суть: С недавних пор судьба решила что пора мне расти на профессиональном попроще программиста и заставила начать потихоньку обучатся Java. Ту инфу что накопал в сети(статейки на хабре, видеоуроки и т.д) по шурудил в целом и некоторые аспекты удалось усвоить (в активе 4 года технаря на техника-программиста(основной упор шел на Delphi) и 1.5 года работы сопровождающим (делфа+немного С#) так что базовые знания программиста имеются). Собственно столкнулся с тем что тяжеловато найти материал, проще говоря обычную методичку где будет реально описано подробно создание какого нибудь проекта. Реального проекта на основе которого можно было бы уже развиваться дальше. В этом плане плане понравились уроки Дударя с JavaFX на основе которых мне удалось самостоятельно реализовать некоторые модули АС которой занимается наше учреждение, но начальство планирует развивать Web направление поэтому интересно было бы, может кто знает какие-нибудь самоучители, методички, видеокурсы где пошагово все это можно посмотреть и повторить и потом уже с полученными знаниями накрутить своих фишек для усвоения материала? Особенно что касается разработки Web-сервиса как серверной части так и клиентской.

5

Разбор задания 2

Использован вариант решения #comment_68039914


Для определения высоты прыжка создаем функцию junpTo в классе Cat:


public double jumpTo() {
if ((length * height * 6.5 / weight) > 2 || (length * height * 6.5 / weight) < 0.5)
return (20 * length * height * 0,5);
return (20 * length * height);
}

Если кот слишком толстый или худой, уменьшаем его высоту прыжка...

Разбор задания 2 Java, Решение, Программирование, Длиннопост

Создаем базовый класс Furniture:


public abstract class Furniture {
private String color;
private String material;
private Double length;
private Double height;
public Furniture(String color, String material, Double length, Double height) {
this.setColor(color);
this.setMaterial(material);
this.setLength(length);
this.setHeight(height);
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getMaterial() {
return material;
}
public void setMaterial(String material) {
this.material = material;
}
public Double getLength() {
return length;
}
public void setLength(Double length) {
this.length = length;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
}
}

Класс Furniture - абстрактный, на основе которого не могут создаваться объекты. При этом наследники класса могут быть не абстрактными, на их основе объекты создавать, соответственно, можно.

Создаем класс Table на базе класса Furniture:


public class Table extends Furniture {
private int legs;
public Table (int legs, String color, String material, Double length,
Double height) {
super(color, material, length, height);
this.legs = legs;
}
}

Ключевое слово super () являет собой ссылку на базовый класс, которую можно использовать в дочерних классах. В основном используется для вызова методов родительского класса. В нашем случае оно вызывает конструктор:

Furniture(String color, String material, Double length, Double height)
Разбор задания 2 Java, Решение, Программирование, Длиннопост

Модифицируем класс Cat: создаем экземпляр класса Table и проверяем запрыгнул ли кот на него:


Table table = new Table(4, "Brown", "Wood", 2.0, 1.2);
if (cat2.jumpTo < table.getHeight())
System.out.println("Бройлер 747 удачно приземлился");
else
System.out.println("Бройлер 747 потерпел крушение");
Разбор задания 2 Java, Решение, Программирование, Длиннопост
Показать полностью 2
4

Abstarct Factory Pattern

Тип: порождающий шаблон


Назначение: обеспечивает создание семейств взаимосвязанных или зависящих друг от друга

объектов без указания их конкретных классов.

Является развитием паттерна Factory Method.

Используется в следующих случаях:

- система не должна зависеть от способа создания объектов;

- система работает с одним из нескольких семейств объектов;

- объекты внутри семейства взаимосвязаны.


Программа обращается к классу-конструктору фабрик FactoryProducer, создавая два класса-фабрики CatFactory и DogFactory - наследники с реализацией абстрактного класса AbstractFactory. Классы фабрики создают 3 объекта класса Cat и 3 объекта класса Dog.

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем классы-интерфейсы Cat и Dog:

Cat.java, Dog.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост
Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем наследников класса Cat с реализацией его функций:

ThinCat.java, NormalCat.java, FatCat.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем наследников класса Dog с реализацией его функций:

ThinDog.java, NormalDog.java, FatDog.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем абстрактный класс AbstractFactory:

AbstractFactory.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем классы-фабрики CatFactory и DogFactory:

CatFactory.java, DogFactory.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Создаем класс-конструктор фабрик FactoryProducer:

FactoryProducer.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

Основной класс AbstractFactoryPatternCvsD:

AbstractFactoryPatternCvsD.java

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост
Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

И что выводит программа:

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост

С вами был Salem, на 100 лет проклятый быть криворуким программистом...

Abstarct Factory Pattern Java, Паттерны, Программирование, Длиннопост
Показать полностью 10
3

Модифицируем класс Cat, создаем базовый класс Furniture

Задание 2: необходимо создать функцию, определяющую высоту прыжка кота, зависящую от базовых параметров кота (вес, рост, высота). Создать базовый класс Furniture (мебель), обладающий параметрами: высота, цвет, материал, длина. На базе класса Furniture создать класс Table (добавить параметр количество ножек). Реализовать взаимодействие двух объектов: Cat и Table. Вывести получилось ли у кота запрыгнуть на него.

Модифицируем класс Cat, создаем базовый класс Furniture Java, Задача, Программирование, Гифка

Мы ищем frontend-разработчика

Мы ищем frontend-разработчика

Привет!)


"Шо? опять?"

Задач так много, что мы не успеваем! И вот нам снова нужны frontend-разработчики!

Как уже стало традицией, мы предлагаем небольшую игру, где вам необходимо при помощи знаний JS, CSS и HTML пройти ряд испытаний!


Зачем всё это?

Каждый день на Пикабу заходит 2,5 млн человек, появляется около 2500 постов и 95 000 комментариев. Наша цель – делать самое уютное и удобное сообщество. Мы хотим регулярно радовать пользователей новыми функциями, не задерживать обещанные обновления и вовремя отлавливать баги.


Что надо делать?

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


Вам необходимо знать современные JS, CSS и HTML, уметь писать быстрый и безопасный код ;) Хотя бы немножко знать о Less, Sass, webpack, gulp, npm, Web APIs, jsDoc, git и др.


Какие у вас условия?

Рыночное вознаграждение по результатам тестового и собеседования, официальное оформление, полный рабочий день, но гибкий график. Если вас не пугает удаленная работа и ваш часовой пояс отличается от московского не больше, чем на 3 часа, тогда вы тоже можете присоединиться к нам!


Ну как, интересно? Тогда пробуйте ваши силы по ссылке :)

Если вы успешно пройдете испытание и оставите достаточно информации о себе (ссылку на резюме, примеры кода, описание ваших знаний), и если наша вакансия ещё не будет закрыта, то мы с вами обязательно свяжемся по email.

Удачи вам! ;)

Показать полностью
Отличная работа, все прочитано!