Programovanie (2) v Jave
1-INF-166, LS 2016/17

Úvod · Pravidlá · Prednášky · Projekt · Netbeans · Odovzdávanie · Test a skúška
· Vyučujúcich môžete kontaktovať pomocou e-mailovej adresy E-prg.png (bude odpovedať ten z nás, kto má príslušnú otázku na starosti alebo kto má práve čas).
· Predvádzanie projektov bude v pondelok 5.6. od 9:00 do 12:00 a v utorok 6.6 od 12:00 do 13:30 (po skúške), oboje v miestnosti M217. Na termín sa prihláste v AIS. Ak robíte vo dvojici, prihlási sa iba jeden člen dvojice.
· Body zo záverečného testu sú na testovači. Poradie príkladov: P1: do šírky, P2: topologické, P3: výnimky, P4: iterátor, P5: testy, P6: strom. Bolo potrebné získať aspoň 20 bodov zo 40.
· Opravný test bude 19.6.2017 od 9:00 v miestnosti M-I. Na termín sa prihláste v AISe.
· Zapisovanie známok a osobné stretnutia ku skúške budú v utorok 13.6. 13:30-14:30 v M163 a v stredu 14.6. 14:00-14:30 v M163.


Cvičenia 20

Z Programovanie
Prejsť na: navigácia, hľadanie

Pridávanie prvkov počas aplikácie

  • Vytvorte aplikáciu, ktorá bude mať 2 časti. Prvá bude obsahovať iba jeden gombík "Pridaj", druhá bude panel, na ktorý budeme postupne pridávať prvky. Vyskúšajte si pridávanie nasledujúcich prvkov (vždy iba jeden typ prvkov naraz):
    • Buttony -- s každým stlačením gombíka "Pridaj" pribudne jeden gombík s postupne rastúcimi číslami. Každý z gombíkov pri stlačení vypisuje svoje číslo
    • RadioButton -- s každým stlačením gombíka "Pridaj" pribudne jeden RadioButton s postupne rastúcimi číslami. RadioButtony sú všetky v jednej ToggleGroup a pri zmene vybraného RadioButton sa vypíše jeho číslo
    • Zoznam -- na paneli je jeden zoznam (List) a s každým stlačením gombíka "Pridaj" pribudne jeden nový riadok v tomto zozname s postupne rastúcimi číslami. Pri zmene vybraného prvku zoznamu sa vypíše jeho číslo.

Rôzne typy udalostí

  • Na paneli vytvorte do stredu kruh s priemerom 100. Nastavte akciu, ktorá celý čas pohybu myšou po paneli vypisuje (do textového popisku pod obrázkom) súradnice myši alebo informáciu, že myš je v kruhu. (Dajte si záležať, aby rozloženie panelu a popisku bolo prirodzené a nepokazilo sa pri zmene veľkosti okna).


Ďalšie okno aplikácie

  • K predchádzajúcej aplikácii si nechajte dopredu (dialógom, vhodným výberom z menu...) nastaviť, aký obrázok bude vykreslený (vždy v strede s veľkosťou cca 100x100)
    • V jednoduchšej verzii pripravte dopredu prvky, ktoré ste schopní vykresliť a ponúknite ich
    • V zložitejšej verzii si premyslite dialóg, ktorý ponúka širšie možnosti (tvar, farbu, ...)

Riešenie - Pridávanie prvkov počas aplikácie

@Override
public void start(Stage primaryStage) {
	// Panel na rozlozenie mensich panelov; ukladaju sa vertikalne v poradi
	VBox root = new VBox();

	// Panel na rozlozenie troch roznych pridavacich tlacidiel
	HBox pridajPane = new HBox();

	// Panel na rozlozenie pridavanych tlacidiel
	final FlowPane buttonPane = new FlowPane();

	// Panel na rozlozenie pridavanych vyberacich tlacidiel
	final FlowPane radioPane = new FlowPane();

	// Zakladny list pre nas zobrazovany zoznam
	final ObservableList<String> data = FXCollections.observableArrayList();

	// A jeho zobraujuci prvok
	ListView<String> listView = new ListView<>(data);
	listView.setMaxWidth(700);
	listView.setMaxHeight(200);

	// Tu pridavame zakladne plochy nasmu root panelu
	root.getChildren().addAll(pridajPane,buttonPane,radioPane, listView);

	// Dalej spravime handlery na stlacenie alebo preznacenie jednotlivych prvkov
	// Ako prvy bude handler pre obycajne tlacitka
	final EventHandler<ActionEvent> btnHandler = new EventHandler<ActionEvent>() {
		@Override
		public void handle(ActionEvent e) {
			System.out.println("Stlacil si " + ((Button)e.getSource()).getText() + ". tlacitko");

		}

	};

	// Druhy bude handler pre radio button
	final ToggleGroup rbGroup = new ToggleGroup();
	rbGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
		@Override
		public void changed(ObservableValue<? extends Toggle> observable, Toggle oldValue, Toggle newValue) {
			if (rbGroup.getSelectedToggle() != null) {
				System.out.println("Oznaceny Radio Button " + ((RadioButton)newValue).getText() + "!");
			}
		}
	});

	// A nakoniec pre zoznam
	listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>(){
		@Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
			if (newValue!=null) System.out.println(newValue);
		}
	});

	// Pridame tri pridavacie tlacitka
	Button pridaj1 = new Button();
	pridaj1.setText("Pridaj Button");
	pridaj1.setOnAction(new EventHandler<ActionEvent>() {
		int kolko = 0;
		@Override public void handle(ActionEvent e) {
			Button newButton = new Button();
			kolko ++;
			newButton.setText(""+kolko);
			newButton.setOnAction(btnHandler);
			buttonPane.getChildren().add(newButton);
		}
	});

	Button pridaj2 = new Button();
	pridaj2.setText("Pridaj Radio Button");
	pridaj2.setOnAction(new EventHandler<ActionEvent>() {
		int kolko = 0;
		@Override
		public void handle(ActionEvent e) {
			RadioButton rb = new RadioButton();
			kolko ++;
			rb.setText(""+kolko);
			rb.setToggleGroup(rbGroup);
			radioPane.getChildren().add(rb);
		}
	});

	Button pridaj3 = new Button();
	pridaj3.setText("Pridaj zaznam");
	pridaj3.setOnAction(new EventHandler<ActionEvent>(){
		int kolko = 0;
		@Override
		public void handle(ActionEvent e) {
			kolko ++;
			data.add("Zaznam c. " + kolko);
		}
	});

	// Nakoniec to cele poskladame dohromady a ukazeme
	pridajPane.getChildren().addAll(pridaj1,pridaj2, pridaj3);

	Scene scene = new Scene(root, 700, 700);
	primaryStage.setScene(scene);
	primaryStage.show();

}

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