Ahoj světě v JavaFX 8

JavaFX je soubor java balíčků, které umožňují vývoj grafických aplikací v Javě. Dříve k tomuto účelu sloužily knihovny AWT a poté Swing. JavaFX je nástupcem Swingu a verze JavaFX 8 je nyní nejaktuálnější.

Takto vypadá jednoduchá grafická aplikace v JavaFX.

javafx_ahoj_svete  javafx_ahoj_svete02

A toto je její kód.

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Button button = new Button();
        final Text message = new Text();

        button.setText("Řekni ahoj");
        button.setOnAction((event) -> message.setText("Ahoj"));

        VBox layout = new VBox(5, button, message);
        layout.setAlignment(Pos.CENTER);

        Scene scene = new Scene(layout, 200, 150);

        primaryStage.setTitle("Ahoj světe");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Názvosloví v JavaFX je inspirováno divadlem (divadelní hrou). Hra se skládá z jednotlivých scén (scenes), které jsou hrány na jevišti (stage). Objekt typu Stage máme k dispozici. Do něj vložíme objekt typu Scene. Do scény se vkládá kontejner, který sdružuje další komponenty a umisťuje je.

Commit failed with error v Idea IDE

Pokud při commitu změn pomocí Gitu v Idea IDE dostanete hlášku "Commit failed with error, 0 files committed, 186 files failed to commit ...", tak jedním z důvodů může být to, že změny nebyly přidány (staged) pomocí git add. Zkuste git status, který vám řekne více. Pokud změny nebyly přidány tak dostanete následující výpis:

Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

        modified:   ...

Pak je tedy potřeba git add * pro přidání všech souborů a následně by měl commit proběhnout v pořádku.

Zobrazení datumu včetně názvu dne v týdnu v Excelu

V Excelu není pro formát buněk typu datum předdefinované formátování se zobrazením názvu dne v týdnu. Je ale možné nadefinovat si formátování vlastní.

Pravým tlačítkem na buňku -> Formát buněk … -> Vlastní

ddd zkrácený název dne
dddd celý název dne

Příklady

Den Formát
8.3.2016 d.m.rrrr
8.3.2016 (út) d.m.rrrr (ddd)
út 08.03.2016 ddd dd.mm.rrrr
úterý – 8.březen.2016 dddd – d.mmmm.rrrr

LinkedIn – jaké jsou povinnosti na mateřské

LinkedIn je sociální síť, která umožňuje lidem přidat pracovní profil a firmám pak najít potencionální zaměstnance. V rámci mateřské dovolené je matka stále zaměstnancem firmy a v rámci profilu je možné těchto několik měsíců uvést jako mateřskou. LinkedIn se snaží, aby profil byl co nejvíce kompletní, a proto se také může zeptat, jaké že to matka vlastně měla za povinnosti 😀 .

linkdedIn_povinnosti_na_materske

Soubor nenalezen – chyba při instalaci Oracle 12c

Instalace Oracle 12c se skládá ze dvou soborů. V instrukcích pro instalaci databáze je uvedeno, že je třeba oba soubory rozbalit do stejné složky. Tím ale autor myslí následující:

Všechna data z
...\winx64_12102_database_2of2\database\stage\Components
překopírovat do
...\winx64_12102_database_1of2\database\stage\Components

V případě, že tak neučiníte, instalace se spustí, ale po nějaké době se vám zobrazí chybové okno.

oracle_12c_instalace_chyba_file_not_found

Porovnávání času v joda.time

Instance org.joda.time.DateTime obsahuje údaje o datumu a čase. Instance org.joda.time.DateTime obsahuje údaje pouze o datumu. Pro porovnávání instancí na to, který čas nastal dříve či později, poskytuje knihovna joda metody isAfter() a isBefore(). Pozor na to, že pokud vrací isAfter() true, znamená to, že čas nastal po určitém čase a pokud isBefore() vrací true, tak daný čas nastal před určitým časem.

DateTime now = DateTime.now();
DateTime past = DateTime.now().minusDays(2);
DateTime future = DateTime.now().plusMonths(5);

System.out.println(now.isAfter(past));
System.out.println(now.isBefore(past));
System.out.println(now.isAfter(future));
System.out.println(now.isBefore(future));

System.out.println();

// porovnávám dva stejné časy
System.out.println(now.toLocalDate().isAfter(now.toLocalDate()));
// porovnávám aktuální čas s časem plus tři dny do budoucna
System.out.println(now.toLocalDate().isBefore(LocalDate.now().plusDays(3)));

Výsledek

true
false
false
true

false
true

Odstranění položky ze seznamu při průchodu

Mějme následující seznam

List list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");

Zkusme z něj odstranit položku.

for (String item : list) {
	if (item.equals("a")) {
		list.remove(item);
	}
}

Jakýkoliv pokus o odsranění položky ze seznamu tímto způsobem vyhodí java.util.ConcurrentModificationException. Zkusme tedy použít klasický cyklus a přistoupit k položce pomocí indexu.

for (int i = 0; i < list.size(); i++) {
	if (list.get(i).equals("a")) {
		System.out.println("removing");
		list.remove(i);
	}
}

Výsledek je [b, c, d] což je správně a nedošlo k vyhození výjimky.

Zkusme ale odstranit „b“ a zároveň „c“.

for (int i = 0; i < list.size(); i++) {
	if (list.get(i).equals("b") || list.get(i).equals("c")) {
		System.out.println("removing");
		list.remove(i);
	}
}

K chybě nedošlo, ale výsledek je [a, c, d], což je špatně. Odstranili jsme „b“, seznam se zmenšil a „c“ se posunulo na index 1 (kde bylo původně „d“). Cyklus ale pokračoval na indexu 2. Pokud bychom chtěli správný výsledek, kód by vypadal následovně.

for (int i = 0; i < list.size(); i++) {
	if (list.get(i).equals("b") || list.get(i).equals("c")) {
		System.out.println("removing");
		list.remove(i);
		i--;
	}
}

Pro modifikaci seznamu je nejlepší použít iterátor.

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
	String item = iterator.next();
	if (item.equals("b") || item.equals("c")) {
		iterator.remove();
	}
}

Metoda s proměnným počtem argumentů v Ruby

Pro určení proměnného počtu argumentů v metodě se v Ruby používá znak hvězdičky (*).

Příklad

def myMethod(*arguments)
  arguments.each do |argument|
    puts argument
  end
end

myMethod
myMethod("a", "b", "c")

Výsledek

a
b
c

Další příklad

def myOtherMethod(arg1, arg2, *others)
  puts arg1
  puts arg2
  others.each do |other|
    puts other
  end
end

myOtherMethod(99, 1.123)
puts
myOtherMethod(123, "Ahoj", 24, 945612, "Nazdar")

Výsledek

99
1.123

123
Ahoj
24
945612
Nazdar

Význam otazníku v názvu Ruby metod

V programovacím jazyce Ruby je určitá zvyklost týkající se názvů metod a přidávání některých znaků na konec názvů metod. Velmi často se lze setkat s metodou, jejíž název končí otazníkem (?), jako např. u metody equal?. Otazník za názvem metody znamená, že metoda vrací datový typ Boolean (true nebo false).

Na příkladu jsou volány metody objektu Integer.

puts 1.equal?1
puts 2.even?
puts 3.odd?
puts 4.zero?
puts 5.between?(1, 10)
puts 6.integer?

Výsledek

true
true
true
false
true
true