Classes author and book to store data of books. Some changes in gui.
parent
1bdd410a39
commit
35fa56d003
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package mobireader;
|
||||
|
||||
import java.util.List;
|
||||
import com.google.common.base.Joiner;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author att
|
||||
*/
|
||||
public class Author {
|
||||
String name;
|
||||
String additionalInfo = "No additional information available";
|
||||
List<String> writtenTitles = new ArrayList<>();
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public Author(String name, String titleOfBook)
|
||||
{
|
||||
writtenTitles.add(titleOfBook);
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Author(String name, ArrayList<String> titles)
|
||||
{
|
||||
writtenTitles = titles;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void addAdditionalInfo(String info)
|
||||
{
|
||||
this.additionalInfo = info;
|
||||
}
|
||||
|
||||
public String provideAllInfo()
|
||||
{
|
||||
String separator = "\n";
|
||||
String info = "Name: " + this.name + "\n";
|
||||
info += "Wrote:\n" + Joiner.on(separator).join(this.writtenTitles);
|
||||
info += "\n" + this.additionalInfo;
|
||||
return info;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package mobireader;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import org.joda.time.DateTime;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author att
|
||||
*/
|
||||
public class Book {
|
||||
String title;
|
||||
Author author;
|
||||
DateTime timestamp;
|
||||
public Book(String title, Author author, DateTime timestamp)
|
||||
{
|
||||
this.title = title;
|
||||
this.author = author;
|
||||
this.timestamp = timestamp;
|
||||
}
|
||||
public Book(String title, Author author)
|
||||
{
|
||||
this.title = title;
|
||||
this.author = author;
|
||||
this.timestamp = new DateTime();
|
||||
}
|
||||
public String getTitle()
|
||||
{
|
||||
return this.title;
|
||||
}
|
||||
public Author getAuthor()
|
||||
{
|
||||
return this.author;
|
||||
}
|
||||
public DateTime getTimestamp()
|
||||
{
|
||||
return this.timestamp;
|
||||
}
|
||||
static public List<Book> createSomeExamples()
|
||||
{
|
||||
List<Book> books = new ArrayList<>();
|
||||
books.add(new Book("Hakuna Matata", new Author("Mr. Elephant", "Hakuna Matata")));
|
||||
books.add(new Book("Life of a star", new Author("Elvis Presley","Life of a star")));
|
||||
String[] titles = {"Real physics", "Kartofle"};
|
||||
books.add(new Book("Real physics", new Author("Wise old physicist",
|
||||
new ArrayList<String>(Arrays.asList(titles)))));
|
||||
return books;
|
||||
}
|
||||
}
|
|
@ -1,39 +1,12 @@
|
|||
package mobireader;
|
||||
|
||||
import javafx.application.Application;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.layout.StackPane;
|
||||
import javafx.stage.Stage;
|
||||
import mobireader.gui.ui.AppMain;
|
||||
|
||||
|
||||
public class MobiReader extends Application {
|
||||
|
||||
@Override
|
||||
public void start(Stage primaryStage) {
|
||||
Button btn = new Button();
|
||||
btn.setText("Display help");
|
||||
btn.setOnAction(new EventHandler<ActionEvent>() {
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
System.out.println("Read the docs! Trololo.");
|
||||
}
|
||||
});
|
||||
|
||||
StackPane root = new StackPane();
|
||||
root.getChildren().add(btn);
|
||||
|
||||
Scene scene = new Scene(root, 300, 250);
|
||||
|
||||
primaryStage.setTitle("Hello World!");
|
||||
primaryStage.setScene(scene);
|
||||
primaryStage.show();
|
||||
}
|
||||
|
||||
public class MobiReader {
|
||||
public static void main(String[] args) {
|
||||
launch(args);
|
||||
AppMain.main(args);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package mobireader.gui.model;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author att
|
||||
*/
|
||||
public class GuiModel {
|
||||
|
||||
public ObservableList listViewItems = FXCollections.observableArrayList();
|
||||
|
||||
}
|
|
@ -0,0 +1,334 @@
|
|||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package mobireader.gui.ui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javafx.application.Application;
|
||||
import javafx.beans.value.ChangeListener;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.Event;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.geometry.Orientation;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.SceneBuilder;
|
||||
import javafx.scene.control.Accordion;
|
||||
import javafx.scene.control.AccordionBuilder;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.ButtonBuilder;
|
||||
import javafx.scene.control.CheckBox;
|
||||
import javafx.scene.control.CheckBoxBuilder;
|
||||
import javafx.scene.control.ChoiceBox;
|
||||
import javafx.scene.control.ChoiceBoxBuilder;
|
||||
import javafx.scene.control.ContextMenu;
|
||||
import javafx.scene.control.ContextMenuBuilder;
|
||||
import javafx.scene.control.HyperlinkBuilder;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.LabelBuilder;
|
||||
import javafx.scene.control.ListView;
|
||||
import javafx.scene.control.ListViewBuilder;
|
||||
import javafx.scene.control.MenuBar;
|
||||
import javafx.scene.control.MenuBarBuilder;
|
||||
import javafx.scene.control.MenuBuilder;
|
||||
import javafx.scene.control.MenuButtonBuilder;
|
||||
import javafx.scene.control.MenuItemBuilder;
|
||||
import javafx.scene.control.PasswordField;
|
||||
import javafx.scene.control.PasswordFieldBuilder;
|
||||
import javafx.scene.control.ProgressBar;
|
||||
import javafx.scene.control.ProgressBarBuilder;
|
||||
import javafx.scene.control.ProgressIndicator;
|
||||
import javafx.scene.control.ProgressIndicatorBuilder;
|
||||
import javafx.scene.control.RadioButton;
|
||||
import javafx.scene.control.RadioButtonBuilder;
|
||||
import javafx.scene.control.ScrollBar;
|
||||
import javafx.scene.control.ScrollBarBuilder;
|
||||
import javafx.scene.control.ScrollPane;
|
||||
import javafx.scene.control.ScrollPaneBuilder;
|
||||
import javafx.scene.control.SelectionMode;
|
||||
import javafx.scene.control.Separator;
|
||||
import javafx.scene.control.Slider;
|
||||
import javafx.scene.control.SliderBuilder;
|
||||
import javafx.scene.control.SplitMenuButtonBuilder;
|
||||
import javafx.scene.control.SplitPane;
|
||||
import javafx.scene.control.SplitPaneBuilder;
|
||||
import javafx.scene.control.Tab;
|
||||
import javafx.scene.control.TabBuilder;
|
||||
import javafx.scene.control.TabPane;
|
||||
import javafx.scene.control.TabPaneBuilder;
|
||||
import javafx.scene.control.TableColumnBuilder;
|
||||
import javafx.scene.control.TableView;
|
||||
import javafx.scene.control.TableViewBuilder;
|
||||
import javafx.scene.control.TextArea;
|
||||
import javafx.scene.control.TextAreaBuilder;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.scene.control.TextFieldBuilder;
|
||||
import javafx.scene.control.TitledPane;
|
||||
import javafx.scene.control.TitledPaneBuilder;
|
||||
import javafx.scene.control.ToggleButton;
|
||||
import javafx.scene.control.ToggleButtonBuilder;
|
||||
import javafx.scene.control.ToggleGroup;
|
||||
import javafx.scene.control.ToolBar;
|
||||
import javafx.scene.control.ToolBarBuilder;
|
||||
import javafx.scene.control.Tooltip;
|
||||
import javafx.scene.control.TreeItem;
|
||||
import javafx.scene.control.TreeItemBuilder;
|
||||
import javafx.scene.control.TreeView;
|
||||
import javafx.scene.control.TreeViewBuilder;
|
||||
import javafx.scene.control.cell.PropertyValueFactory;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.image.ImageView;
|
||||
import javafx.scene.input.KeyCombination;
|
||||
import javafx.scene.input.MouseButton;
|
||||
import javafx.scene.input.MouseEvent;
|
||||
import javafx.scene.layout.BorderPane;
|
||||
import javafx.scene.layout.BorderPaneBuilder;
|
||||
import javafx.scene.layout.HBoxBuilder;
|
||||
import javafx.scene.layout.StackPaneBuilder;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.scene.layout.VBoxBuilder;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.scene.shape.CircleBuilder;
|
||||
import javafx.scene.shape.RectangleBuilder;
|
||||
import javafx.scene.web.HTMLEditor;
|
||||
import javafx.scene.web.HTMLEditorBuilder;
|
||||
import javafx.scene.web.WebView;
|
||||
import javafx.scene.web.WebViewBuilder;
|
||||
import javafx.stage.Popup;
|
||||
import javafx.stage.PopupBuilder;
|
||||
import javafx.stage.Stage;
|
||||
import mobireader.Book;
|
||||
import mobireader.gui.model.GuiModel;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author att
|
||||
*/
|
||||
public class AppMain extends Application {
|
||||
|
||||
// A reference to the model
|
||||
GuiModel model = new GuiModel();
|
||||
|
||||
Stage stage;
|
||||
CheckBox checkBox;
|
||||
ContextMenu contextMenu;
|
||||
Label htmlLabel;
|
||||
Popup alertPopup;
|
||||
Tab webViewTab;
|
||||
List<Book> myBooks = Book.createSomeExamples();
|
||||
|
||||
public static void main(String[] args) {
|
||||
Application.launch(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start(final Stage primaryStage) {
|
||||
stage = primaryStage;
|
||||
Scene scene = SceneBuilder.create()
|
||||
.width(800)
|
||||
.height(600)
|
||||
.root(
|
||||
BorderPaneBuilder.create()
|
||||
.top(
|
||||
VBoxBuilder.create()
|
||||
.children(
|
||||
createMenus()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.center(createTabs())
|
||||
.build()
|
||||
)
|
||||
.build();
|
||||
|
||||
stage.setScene(scene);
|
||||
stage.setTitle("Mobi reader");
|
||||
stage.show();
|
||||
}
|
||||
|
||||
MenuBar createMenus() {
|
||||
MenuBar menuBar = MenuBarBuilder.create()
|
||||
.menus(
|
||||
MenuBuilder.create()
|
||||
.text("Edit")
|
||||
.items(
|
||||
MenuItemBuilder.create()
|
||||
.text("Cut")
|
||||
.build(),
|
||||
MenuItemBuilder.create()
|
||||
.text("Copy")
|
||||
.build(),
|
||||
MenuItemBuilder.create()
|
||||
.text("Paste")
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.build();
|
||||
|
||||
return menuBar;
|
||||
}
|
||||
|
||||
TabPane createTabs() {
|
||||
final WebView webView;
|
||||
TabPane tabPane = TabPaneBuilder.create()
|
||||
.tabs(
|
||||
TabBuilder.create()
|
||||
.text("Your books")
|
||||
.content(createAddedBooksView())
|
||||
.closable(false)
|
||||
.build(),
|
||||
TabBuilder.create()
|
||||
.text("Add a book")
|
||||
.content(createScrollMiscDemoNode())
|
||||
.closable(false)
|
||||
.build()
|
||||
)
|
||||
.build();
|
||||
|
||||
return tabPane;
|
||||
}
|
||||
|
||||
TreeItem createBookTreeItem (Book book)
|
||||
{
|
||||
return TreeItemBuilder.create()
|
||||
.value(book.getTitle())
|
||||
.children(
|
||||
TreeItemBuilder.create()
|
||||
.value("Author: " + book.getAuthor().getName())
|
||||
.children(
|
||||
TreeItemBuilder.create()
|
||||
.value(book.getAuthor().provideAllInfo())
|
||||
.build()
|
||||
)
|
||||
.build(),
|
||||
TreeItemBuilder.create()
|
||||
.value("Added: " + book.getTimestamp())
|
||||
.build()
|
||||
)
|
||||
.build();
|
||||
}
|
||||
|
||||
TreeItem createTreeViewOfBooksByAuthor(List<Book> books)
|
||||
{
|
||||
List<TreeItem> bookItems= new ArrayList<>();
|
||||
for (Book book : books)
|
||||
{
|
||||
bookItems.add(createBookTreeItem(book));
|
||||
}
|
||||
return TreeItemBuilder.create()
|
||||
.value("Root")
|
||||
.children(
|
||||
bookItems.get(0),
|
||||
bookItems.get(1),
|
||||
bookItems.get(2)
|
||||
)
|
||||
.build();
|
||||
}
|
||||
|
||||
Node createAddedBooksView() {
|
||||
TreeView treeView = TreeViewBuilder.create()
|
||||
.minWidth(150)
|
||||
.showRoot(false)
|
||||
.editable(false)
|
||||
.root(
|
||||
createTreeViewOfBooksByAuthor(myBooks)
|
||||
)
|
||||
.build();
|
||||
|
||||
ListView listView = ListViewBuilder.create()
|
||||
.items(model.listViewItems)
|
||||
.build();
|
||||
|
||||
SplitPane splitPane = SplitPaneBuilder.create()
|
||||
.items(
|
||||
treeView,
|
||||
listView
|
||||
)
|
||||
.build();
|
||||
|
||||
treeView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
|
||||
treeView.getSelectionModel().selectedItemProperty()
|
||||
.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ObservableValue observable, Object oldValue,
|
||||
Object newValue) {
|
||||
TreeItem treeItem = (TreeItem)newValue;
|
||||
if (newValue != null && treeItem.isLeaf()) {
|
||||
model.listViewItems.clear();
|
||||
for (int i = 1; i <= 1; i++) {
|
||||
model.listViewItems.add(treeItem.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return splitPane;
|
||||
}
|
||||
|
||||
Node createScrollMiscDemoNode() {
|
||||
ScrollPane scrollPane = ScrollPaneBuilder.create()
|
||||
.hbarPolicy(ScrollPane.ScrollBarPolicy.NEVER)
|
||||
.vbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED)
|
||||
.onMousePressed(new EventHandler<MouseEvent>() {
|
||||
public void handle(MouseEvent me) {
|
||||
if (me.getButton() == MouseButton.SECONDARY) {
|
||||
contextMenu.show(stage, me.getScreenX(), me.getScreenY());
|
||||
}
|
||||
}
|
||||
})
|
||||
.build();
|
||||
return scrollPane;
|
||||
}
|
||||
|
||||
Popup createAlertPopup(String text) {
|
||||
Button okButton;
|
||||
alertPopup = PopupBuilder.create()
|
||||
.content(
|
||||
StackPaneBuilder.create()
|
||||
.children(
|
||||
RectangleBuilder.create()
|
||||
.width(300)
|
||||
.height(200)
|
||||
.arcWidth(20)
|
||||
.arcHeight(20)
|
||||
.fill(Color.LIGHTBLUE)
|
||||
.stroke(Color.GRAY)
|
||||
.strokeWidth(2)
|
||||
.build(),
|
||||
BorderPaneBuilder.create()
|
||||
.center(
|
||||
htmlLabel = LabelBuilder.create()
|
||||
.text(text)
|
||||
.wrapText(true)
|
||||
.maxWidth(280)
|
||||
.maxHeight(140)
|
||||
.build()
|
||||
)
|
||||
.bottom(
|
||||
okButton = ButtonBuilder.create()
|
||||
.text("OK")
|
||||
.onAction(new EventHandler<ActionEvent>() {
|
||||
@Override public void handle(ActionEvent e) {
|
||||
alertPopup.hide();
|
||||
}
|
||||
})
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.build()
|
||||
)
|
||||
.build();
|
||||
|
||||
BorderPane.setAlignment(okButton, Pos.CENTER);
|
||||
BorderPane.setMargin(okButton, new Insets(10, 0, 10, 0));
|
||||
return alertPopup;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue