Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

java-lekcii-2016-01-17 / presentation-nov-7

.docx
Скачиваний:
14
Добавлен:
27.03.2016
Размер:
23.36 Кб
Скачать

Дополнительные ресурсы

См. Загрузка плагинов из Eclipse Marketplace.docx

build.gradle

apply plugin: 'java'

jar {

manifest {

/**

* Полный адрес класса, в котором находится метод

* public static void main(String[])

*/

attributes 'Main-Class' : 'ru.mami.Main'

}

}

Main.java

package ru.mami;

import javafx.application.Application;

import javafx.beans.value.ChangeListener;

import javafx.beans.value.ObservableValue;

import javafx.event.ActionEvent;

import javafx.event.EventHandler;

import javafx.geometry.Insets;

import javafx.geometry.Pos;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.control.Label;

import javafx.scene.control.PasswordField;

import javafx.scene.control.TextField;

import javafx.scene.layout.GridPane;

import javafx.scene.text.Font;

import javafx.scene.text.FontWeight;

import javafx.scene.text.Text;

import javafx.stage.Stage;

public final class Main extends Application {

public static void main(String[] args) {

// метод JavaFX, запускающий приложение

// обычно запускается из main

launch(args);

}

/**

* метод, вызываемый JavaFX из метода launch(String[])

*

* этот метод переопределяется для добавления необходимой логики

*/

@Override

public void start(Stage primaryStage) throws Exception {

// заголовок окна

primaryStage.setTitle("Calculator");

// поскольку приложения на Java должны работать на различных платформах,

// чаще всего вместо жестко заданных координат элементов форм

// используются менеджеры раскладки, которые управляют размером и

// положением элементов

// создание менеджера раскладки "таблица"

GridPane grid = new GridPane();

// расположить таблицу по центру, а не в левом верхнем углу

grid.setAlignment(Pos.CENTER);

// пространство между рядами и колонками таблицы

grid.setHgap(10);

grid.setVgap(10);

// пространство между таблицей и краями сцены

grid.setPadding(new Insets(25, 25, 25, 25));

// надпись с возможностью изменения параметров вывода, например, шрифта

Text sceneTitle = new Text("Welcome");

// установка нового шрифта для надписи

//

// новый шрифт в данном случае создается не при помощи конструктора

// (конструктор класса Font скрыт модификатором видимости, и потому не

// может быть вызван из пользовательского класса), а при помощи static

// метода

sceneTitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));

// добавление объекта в таблицу

// --------объект

// ----------|-------индекс колонки (индекс первой колонки - 0)

// ----------|-------|--индекс ряда (индекс первого ряда - 0)

// ----------|-------|--|--количество занимаемых элементом колонок

// ----------|-------|--|--|--количество занимаемых элементом рядов

// ----------|-------|--|--|--|

grid.add(sceneTitle, 0, 0, 2, 1);

// метод можно вызвать с 3 параметрами вместо 5, тогда значение

// последних двух параметров будет принято за 1

// надпись без широких возможностей редактирования

Label userName = new Label("User Name:");

grid.add(userName, 0, 1);

// создание поля ввода

TextField userTextField = new TextField();

// установка обработчика события изменения текста в поле ввода

// класс StringProperty, в данном случае получаемый из TextField при

// помощи метода textProperty(), имеет метов addListener, который объект

// любого класса, реализующего интерфейс ChangeListener<String>

// <String> в данном случае означает, что этот ChangeListener должен

// работать с объектами класса String и на этапе компиляции выдавать

// ошибку при попытке вызвать его с другим объектом

// new ChangeListener<String>() означает "создать новый объект

// анонимного и нигде не определенного класса, реализующего интерфейс

// ChangeListener, работающего с объектами класса String"

// далее идет обычное тело класса, реализующего необходимые интерфейсу

// ChangeListener методы

// такой подход к созданию объектов используется тех случаях, когда

// нужен только один объект, т.е. создавать полноценный класс (шаблон

// объектов) ради него нет смысла

// разумеется, в данном случае можно создать в отдельном файле отдельный

// класс, реализующий интерфейс ChangeListener<String>, создать объект

// этого класса и скормить его методу addListener, работать тот и другой

// подходы будут одинаково

userTextField.textProperty().addListener(new ChangeListener<String>() {

@Override

public void changed(ObservableValue<? extends String> observable,

String oldValue, String newValue) {

System.out.println(newValue);

}

});

grid.add(userTextField, 1, 1);

Label pw = new Label("Password:");

grid.add(pw, 0, 2);

// поле ввода пароля (поле ввода текста, в котором текст закрыт

// звездочками)

PasswordField pwBox = new PasswordField();

grid.add(pwBox, 1, 2);

// кнопка

Button submit = new Button("Swap");

// обработчик нажатия кнопки

// логика та же, что и в случае с полем ввода

submit.setOnAction(new EventHandler<ActionEvent>() {

@Override

public void handle(ActionEvent event) {

// метод меняет значения пароля и имени местами

String username = userTextField.getText();

String password = pwBox.getText();

pwBox.setText(username);

userTextField.setText(password);

}

});

grid.add(submit, 1, 3);

// создание сцены с определенным содержимым

// ширина и высота сцены либо устанавливаются после содержимого (grid,

// 100, 200), либо рассчитываются на основе размеров демонстрируемых

// элементов (как в данном случае)

Scene scene = new Scene(grid);

// установка сцены для демонстрации

primaryStage.setScene(scene);

// демонстрация сцены

primaryStage.show();

}

}

Упражнения

  • Установить из Eclipse Marketplace Buildship Gradle Integration и Minimalist Gradle Editor

  • Создать новый проект Gradle (File -> New -> Other -> Gradle -> Gradle Project, указать название проекта, а все остальное оставить по дефолту)

  • Удалить из проекта автоматически созданные пакеты и классы

  • Добавить класс с методом main, наследующий Application

  • Прописать путь к этому классу в build.gradle

  • Создать в классе GridPane

  • Добавить в GridPane нередактируемое текстовое поле

  • Написать метод, принимающий GridPane, индекс ряда и количество занимаемых колонок и добавляющий в GridPane кнопки от 0 до 9 в соответствии с указанными параметрами. Каждая кнопка должна добавлять соответствующую цифру в конец текстового поля.

  • Добавить кнопки «удалить» и «очистить», удаляющие последнюю цифру и очищающие текстовое поле соответственно.

  • Добавить кнопки «+», «-», «*», «/».

  • Реализовать базовый функционал калькулятора.

  • Собрать приложение в JAR (Java Archive) командой gradle jar.

Соседние файлы в папке java-lekcii-2016-01-17