Diskuze: Vytvoření více butonnu v javaFx
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 29 zpráv z 29.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Nefunguje a to todle
public Button cislaSup(Button[] kundo) {
for(int i = 0; i<=9; i++) {
AnchorPane.getChildren().add(jojo.jmeno[i]);
}
Ježiš strašně se omlouvam za ty nazvy ruzny -.-
něco jsem dal dohromady
Button[] b = new Button[10];
int x = 50;
int y = 50;
for (int i = 0; i < b.length; i++)
{
b[i] = new Button();
b[i].setText("tlacitko");
b[i].setLayoutX(x);
b[i].setLayoutY(y);
anchor.getChildren().add(b[i]);
y+=20;
}
vytvoří to 10 tlačítek s textem tlacitko
něco jsem dal dohromady
Button[] b = new Button[10];
int x = 50;
int y = 50;
for (int i = 0; i < b.length; i++)
{
b[i] = new Button();
b[i].setText("tlacitko");
b[i].setLayoutX(x);
b[i].setLayoutY(y);
anchor.getChildren().add(b[i]);
y+=20;
}
vytvoří to 10 tlačítek s textem tlacitko
package zkouseniblbosti;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
public class Metody {
Button[] jmeno = new Button[10];
public Button[] napis(TextField textfield) {
for(int i = 0; i<=9; i++) {
jmeno[i] = new Button();
jmeno[i].setId("cislo"+i);
jmeno[i].setLayoutX(50);
jmeno[i].setLayoutY(50);
jmeno[i].setMnemonicParsing(false);
jmeno[i].setOnAction((ActionEvent e) -> {
textfield.setText("HOla");
});
jmeno[i].setPrefHeight(50);
jmeno[i].setPrefWidth(150);
jmeno[i].setText("napis"+i);
}
return jmeno;
}
public Button cislaSup(Button[] kundo) {
for(int i = 0; i<=9; i++) {
AnchorPane.getChildren().add(jojo.jmeno[i]);
}
}
}
Ale nemáš tu nikde vytvořený anchorPane
A pošli prosím taky ten FXML soubor
<?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 fx:id="AnchorPane" prefHeight="200" prefWidth="320" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="zkouseniblbosti.FXMLDocumentController">
<children>
<TextField fx:id="todleVypis" layoutX="59.0" layoutY="100.0" />
</children>
</AnchorPane>
Jinak toto funguje když dám do mainu
jojo.napis(todleVypis);
for(int i = 0; i<=9; i++) {
AnchorPane.getChildren().add(jojo.jmeno[i]);
}
ale jabych chtel tuto metodu udělat ve třídě Metody.... ale tam mi to háže tu chybu jk jsem vyfotil
já to mám takto a funguje to
public class FXMLDocumentController implements Initializable {
@FXML
private Label label;
@FXML
private AnchorPane anchor;
@FXML
private void handleButtonAction(ActionEvent event) throws XMLStreamException {
trida Trida = new trida();
Button[] b = new Button[10];
int x = 50;
int y = 50;
for (int i = 0; i < b.length; i++)
{
b[i] = new Button();
b[i].setText(String.valueOf(i));
b[i].setLayoutX(x);
b[i].setLayoutY(y);
anchor.getChildren().add(b[i]);
y+=20;
x+=20;
}}
@Override
public void initialize(URL url, ResourceBundle rb) {
}}
myslím že jsi v té třídě nenastavil AnchorPane
private AnchorPane anchor;
Ježiš sem vul... ale i přes to mi to nefunguje kod vypada takto:
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) {
jojo.vypisCisla(todleVypis);
}
}
a tady třida 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 {
Button[] jmeno = new Button[10];
public AnchorPane AnchorPane;
public void napis(TextField textfield) {
for (int i = 0; i <= 9; i++) {
jmeno[i] = new Button();
jmeno[i].setId("cislo" + i);
jmeno[i].setLayoutX(50);
jmeno[i].setLayoutY(50);
jmeno[i].setMnemonicParsing(false);
jmeno[i].setOnAction((ActionEvent e) -> {
textfield.setText("HOla");
});
jmeno[i].setPrefHeight(50);
jmeno[i].setPrefWidth(150);
jmeno[i].setText("napis" + i);
}
}
public void vypisCisla(TextField java) {
napis(java);
for (int i = 0; i <= 9; i++) {
AnchorPane.getChildren().add(jmeno[i]);
}
}
}
Prosím tě, můžeš přepsat proměnnou AnchorPane za anchorPane? Pomohlo by Ti to vyřešit dost problémů.
Předpokládám, ze Ti dělá porad problém tato metoda:
public void vypisCisla(TextField java) {
napis(java);
for (int i = 0; i <= 9; i++) {
AnchorPane.getChildren().add(jmeno[i]);
}
}
Ted t zrejmeo píše bud NullPointerException, nebo call non-static
method.
Ten nullPointer by byl kvůli tomu, že nemáš inicializivanou proměnnou
AnchorPane. Call non-static method by byl kvůli tomu, ze
překladač neví, ze AnchorPane je název proměnný a ne
název třídy. Takže si zinicializuj proměnou a přejmenuje ji.
Zmenil sem a píše to tento problém... metodu jsem spojil do jedné
public void napis(TextField textfield) {
for (int i = 0; i <= 9; i++) {
jmeno[i] = new Button();
jmeno[i].setId("cislo" + i);
jmeno[i].setLayoutX(50);
jmeno[i].setLayoutY(50);
jmeno[i].setMnemonicParsing(false);
jmeno[i].setOnAction((ActionEvent e) -> {
textfield.setText("HOla");
});
jmeno[i].setPrefHeight(50);
jmeno[i].setPrefWidth(150);
jmeno[i].setText("napis" + i);
}
for (int i = 0; i <= 9; i++) {
anchorPane.getChildren().add(jmeno[i]);
}
}
můžu tě poprosit ještě jednou o zdroják celé té metody?
A jak ziskavas referenci na tu proměnnou anchorPane ve třídě Metody?
Pouzivej tlačítko odpovědět...
Takže tady je kod Controlleru
package zkouseniblbosti;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.Initializable;
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) {
jojo.napis(todleVypis);
}
}
Tady třídy 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 {
Button[] jmeno = new Button[11];
public AnchorPane anchorPane;
public void napis(TextField textfield) {
for (int i = 0; i <= 9; i++) {
jmeno[i] = new Button();
jmeno[i].setId("cislo" + i);
jmeno[i].setLayoutX(50);
jmeno[i].setLayoutY(50);
jmeno[i].setMnemonicParsing(false);
jmeno[i].setOnAction((ActionEvent e) -> {
textfield.setText("HOla");
});
jmeno[i].setPrefHeight(50);
jmeno[i].setPrefWidth(150);
jmeno[i].setText("napis" + i);
anchorPane.getChildren().add(jmeno[i]);
}
/* for (int i = 0; i <= 9; i++) {
anchorPane.getChildren().add(jmeno[i]);
}*/
}
}
Aaa fxml
<?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 fx:id="anchorPane" prefHeight="200" prefWidth="320" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="zkouseniblbosti.FXMLDocumentController">
<children>
<TextField fx:id="todleVypis" layoutX="59.0" layoutY="100.0" />
</children>
</AnchorPane>
Netuším jak to udělat v té třídě a myslím že tady
public AnchorPane anchorPane;
public TextField todleVypis;
by mělo být
@FXML
public AnchorPane anchorPane;
@FXML
public TextField todleVypis;
jinak se na to kouknu zítra dneska už nad tím nejsem schopnej přemejšlet
, a nebo poradí někdo
jiný
A stále to hází nullPointer exception?... Nemáš inicializivanou proměnou anchorPane ve třídě Metody.
Ta anotace @FXML je užitečná hlavně tehdy, pokud chceš mít tu proměnnou privátní, jinak je zbytecne to tam psát...
Tu tam sice ma, ale v třídě Metody ji nemá nikde inicializivanou, proto ten null pointer exception.
tohle ti chybu nehází?
Button[] jmeno = new Button[11];
nemá to bát takto?
public class Metody {
public Button[] jmeno;
public AnchorPane anchorPane;
public void napis(TextField textfield) {
this.jmeno = new Button[11];
for (int i = 0; i <= 9; i++) {
jmeno[i] = new Button();
jmeno[i].setId("cislo" + i);
jmeno[i].setLayoutX(50);
jmeno[i].setLayoutY(50);
jmeno[i].setMnemonicParsing(false);
jmeno[i].setOnAction((ActionEvent e) -> {
textfield.setText("HOla");
});
jmeno[i].setPrefHeight(50);
jmeno[i].setPrefWidth(150);
jmeno[i].setText("napis" + i);
anchorPane.getChildren().add(jmeno[i]);
}
}
}
Nebudeme tu chodit kolem horké kaše a napisu Ti, co a jak, aby to chodilo.
1. Když tak moc chceš přidávat kontrolky ve třídě Metody, tak si tam dej konstruktor, který přijme v parametru ten anchorPane takto:
public Metody(AnchorPane anchorPane) {
this.anchorPane = anchorPane;
}
2. Ve třídě FXMLDocumentController upravis vytváření třídy metody takto:
Metody jojo = new Metody(anchorPane);
Ted by to už ten null pointer házet nemělo.
Zobrazeno 29 zpráv z 29.