NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Přidání buttonu v JavaFX

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
vlastajuracka:24.10.2015 0:05

Čaues lidi mám problémek v fx bych si chtěl sám udělat button a mam ho nastaveny dle kodu a vim že se musi přidat do toho xml souboru ale vubec nvm jk možná mám chybu i v něčem jiném!... Děkuju moc za každou pomoc :) Na nazvy baličku nekoukejte
FXMLDocumentCon­troller.java

package zkouseniblbosti;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;

public class FXMLDocumentController implements Initializable {
   public TextField todleVypis;
   Button btn = new Button();
   Metody jojo= new Metody();

    public void initialize(URL url, ResourceBundle rb) {
        jojo.napis(todleVypis, btn);
    }

}

FXMLDocument

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="zkouseniblbosti.FXMLDocumentController">
   <children>
      <TextField fx:id="todleVypis" layoutX="59.0" layoutY="100.0" />
   </children>
</AnchorPane>

Třída metody

package zkouseniblbosti;

import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;

public class Metody {
    public void napis(TextField textfield, Button button) {
        button.setId("konec");
        button.setLayoutX(311.0);
        button.setLayoutY(510.0);
        button.setMnemonicParsing(false);
        button.setOnAction((ActionEvent e) -> {
            textfield.setText("Accepted");
        });
        button.setPrefHeight(48.0);
        button.setPrefWidth(53.0);
        button.setText("Ok");
    }

}

Main snad přidávat nemusim

 
Odpovědět
24.10.2015 0:05
Avatar
Odpovídá na vlastajuracka
Petr Štechmüller:24.10.2015 0:15

Ahoj, Ty sice vytvoříš tlačítko, ale jak říkáš, nikde ho nepřidáváš do scény. Přidej si do kontroleru ještě referenci na anchor pane, který má metodu getChildren, která vrátí observable list jeho "dětí". Do tohoto listu přidej to tvoje vytvořené tlačítko metodou add. Celé by to mohlo vypadat asi takto:

// Není dobré používat velké písmeno na začátku proměnné, člověk si to může splést s třídou...
AnchorPane.getChildren().add(button);
Nahoru Odpovědět
24.10.2015 0:15
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
vlastajuracka:24.10.2015 14:48

Ja jenom nevim jak tam přidat tu referenci :D

 
Nahoru Odpovědět
24.10.2015 14:48
Avatar
Odpovídá na vlastajuracka
Petr Štechmüller:24.10.2015 15:00

Jestli nevíš, jak přidat referenci na ten anrhorPane, tak je to stejny, jako s pridanim reference na ten textField.
Do kontroleru pod řádek:

public TextField todleVypis;

si napis toto:

public AnchorPane AnchorPane;

Tím získáš referenci na AnchorPane, takže pak použiješ postup popsaný výše...

Používej tlačítko odpovědet... Díky

Nahoru Odpovědět
24.10.2015 15:00
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
vlastajuracka:24.10.2015 15:51

Tak hele mam to takhle a nefunguje mi to v čem je problem ?
Controller

package zkouseniblbosti;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;

public class FXMLDocumentController implements Initializable {
   public AnchorPane AnchorPane;
   public TextField todleVypis;
   Metody jojo= new Metody();

   @Override
    public void initialize(URL url, ResourceBundle rb) {
       Button tlacitko;
        AnchorPane.getChildren().add(jojo.napis(todleVypis, tlacitko=new Button()));
    }

}

Třída metody

package zkouseniblbosti;

import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;

public class Metody {
    public Button napis(TextField textfield, Button button) {

        button.setId("konec");
        button.setLayoutX(311.0);
        button.setLayoutY(510.0);
        button.setMnemonicParsing(false);
        button.setOnAction((ActionEvent e) -> {
            textfield.setText("Accepted");
        });
        button.setPrefHeight(48.0);
        button.setPrefWidth(53.0);
        button.setText("Ok");
        return button;
    }

}
 
Nahoru Odpovědět
24.10.2015 15:51
Avatar
Odpovídá na vlastajuracka
Petr Štechmüller:24.10.2015 16:14

To že Ti to nefunguje, je celkem široký pojem. Zkus napsat, co přesně nefunguje, nebo jestli to vyhazuje vyjímku, tak výpis z vyjímky...

Nahoru Odpovědět
24.10.2015 16:14
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
vlastajuracka:24.10.2015 16:16

Moc se omlouvám tady je výpis co to hodí při spuštění programu...

 
Nahoru Odpovědět
24.10.2015 16:16
Avatar
Petr Štechmüller:24.10.2015 16:24

Už jsem na to přišel. Ve FXML dokumentu mas v definici anchorPane toto:

id="AnchorPane"

místo tohoto:

fx:id="AnchorPane"

Zkus to opravit. mělo by to pomoct

Nahoru Odpovědět
24.10.2015 16:24
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
vlastajuracka:24.10.2015 16:29

Super děkuju moc za rychlou a spravnou pomoc davam palec děkuju :)

 
Nahoru Odpovědět
24.10.2015 16:29
Avatar
Petr Štechmüller:24.10.2015 16:33

Není zač. Tlačítkem vpravo u mého komentáře můžeš označit správnou odpověď. Tím označíš toto vlákno za vyřešené a já dostanu nějaký ten bodík k dobru :D

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
24.10.2015 16:33
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.