Diskuze: Přidání buttonu v JavaFX

Java Java Přidání buttonu v JavaFX

Avatar
vlastajuracka:

Č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:

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  +1 24.10.2015 0:15
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
vlastajuracka:

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:

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:

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:

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:

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:

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  +1 24.10.2015 16:24
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
vlastajuracka:

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:

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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 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.