Witam, mam problem taki że mam button w fxml-u przeniesiony do kontrolera z onClickiem() i chcę żeby w tym onlicku się otwierał dialog user tam wpisywał itd. tam szło to to wiem jak zrobić tylko potem te informacje co user wpisze chce przerobić na layout z buttonami i labelai i wsadzić do scrollarea w fxmlu i tego właśnie nie wiem jak zrobić... W sensie jak miałbym to robić to robiłbym to przez kod javy a wiem że powinienem przez fxmla :/
0
1
- Po
onClick
otwierasz sobie okno dialogowe z formatką do wpisywania i masz dwie opcje: albo wysyłasz przy tworzeniu dialogu model do modyfikacji przez konstruktor lub robisz jakieś obejścia i modyfikujesz model danych z jakiegoś singletona, tworzysz jakiegoś handlera. Musisz mieć jakiś obiekt przechowujący dane wprowadzane w dialogu. - Jak masz kontroler z powiązanym FXML'em to możesz mieć pole powiązane:
@FXML
ScrollPane pane
wtedy gdy masz już model danych z formatki możesz sobie wygenerować jakiegośGridPane
z etykietkami przyciskami i dodać go doScrollPane'a
przez jakiśaddNode
nie pamiętam już konkretnie. - Jakbyś miał kod aplikacji to mógłbym zerknąć na to bardziej konkretnie.
0
Aha czyli mając ten scrollpanel z id w fxmlu i wpisując go do javy one się jakby połączą i jak w javie coś do niego dodam to to się wpisze do kodu fxmla?
PACKAGE: HABIT
package Habit;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.text.TextAlignment;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
public class Habit {
String name, notes;
int currentScore, maxScore;
///gui
Button statusBtn;
Label namelbl;
HBox lay;
///
Habit(String name, String notes) {
this.name = name;
this.notes = notes;
namelbl = new Label(name);
statusBtn = new Button("...");
statusBtn.setPrefSize(16, 16);
statusBtn.setVisible(true);
statusBtn.setOnAction(e -> System.out.println(notes));
lay = new HBox();
lay.setSpacing(10);
lay.setAlignment(Pos.BASELINE_LEFT);
lay.getChildren().addAll(statusBtn, namelbl);
Calendar cal = Calendar.getInstance();
Date dat = cal.getTime();
cal.setTime(dat);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
int day = cal.get(Calendar.DAY_OF_MONTH);
System.out.println(dayOfWeek);
int monday = day - ((dayOfWeek + 5) % 7);
Vector<Button> buttons = new Vector<>();
for (int i = 0; i < 7; i++) {
Button btnxd = new Button();
btnxd.setText(String.valueOf(monday + i));
btnxd.setPadding(new Insets(5, 5, 5, 5));
btnxd.setPrefSize(32, 32);
if (i <= dayOfWeek-2) setStatus(status.UNKNOWN, btnxd);
buttons.add(btnxd);
lay.getChildren().add(btnxd);
}
}
public enum status {
UNKNOWN, COMPLETED, SKIPPED, FAILED
}
public void setStatus(status stat, Button but) {
if (stat == status.UNKNOWN) {
but.setStyle("-fx-background-color: gray;");
but.setText("?");
but.setOnAction(e -> setStatus(status.COMPLETED, but));
} else if (stat == status.COMPLETED) {
but.setStyle("-fx-background-color: green;");
but.setText("✔");
but.setOnAction(e -> setStatus(status.SKIPPED, but));
currentScore+=1;
if(currentScore>maxScore) maxScore = currentScore;
} else if (stat == status.SKIPPED) {
but.setStyle("-fx-background-color: blue;");
but.setText("▬");
but.setOnAction(e -> setStatus(status.FAILED, but));
} else if (stat == status.FAILED) {
but.setStyle("-fx-background-color: red;");
but.setText("✖");
but.setOnAction(e -> setStatus(status.UNKNOWN, but));
currentScore=0;
}
}
public String getName() {
return name;
}
public HBox getLay() {
return lay;
}
}
package Habit;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
public class HabitController {
@FXML
private Button btnMonday, btnTuesday, btnWednesday, btnThursday, btnFriday, btnSaturday, btnSunday;
@FXML
public void onAnyWeekBtnClicked(ActionEvent e){
Object o = e.getSource();
String senderName = o.toString();
switch (senderName)
{
case "btnMonday": btnMonday.setStyle("-fx-background-color: #363636");
case "btnTuesday": btnTuesday.setStyle("-fx-background-color: #363636");
case "btnWednesday": btnWednesday.setStyle("-fx-background-color: #363636");
case "btnThursday": btnThursday.setStyle("-fx-background-color: #363636");
case "btnFriday": btnFriday.setStyle("-fx-background-color: #363636");
case "btnSaturday": btnSaturday.setStyle("-fx-background-color: #363636");
case "btnSunday": btnSunday.setStyle("-fx-background-color: #363636");
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToolBar?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="Habit.HabitController">
<children>
<VBox layoutX="15.0" layoutY="14.0">
<children>
<Label prefHeight="17.0" prefWidth="149.0" text="Habit name:" />
<TextField />
</children>
</VBox>
<VBox layoutX="15.0" layoutY="82.0">
<children>
<Label prefHeight="17.0" prefWidth="150.0" text="Notes, comments:" />
<TextField prefHeight="150.0" prefWidth="148.0" />
</children>
</VBox>
<Label layoutX="34.0" layoutY="273.0" text="Schedule" />
<ToolBar layoutX="14.0" layoutY="312.0" prefHeight="40.0" prefWidth="200.0">
<items>
<Button mnemonicParsing="false" text="Monday" fx:id="btnMonday" onAction="#onAnyWeekBtnClicked"/>
<Button mnemonicParsing="false" text="Tuesday" fx:id="btnTuesday"/>
<Button mnemonicParsing="false" text="Wednesday" fx:id="btnWednesday" />
<Button mnemonicParsing="false" text="Thursday" fx:id="btnThursday"/>
<Button mnemonicParsing="false" text="Friday" fx:id="btnFriday"/>
<Button mnemonicParsing="false" text="Saturday" fx:id="btnSaturday"/>
<Button mnemonicParsing="false" text="Sunday" fx:id="btnSunday"/>
</items>
</ToolBar>
</children>
</AnchorPane>
I PACKAGE SAMPLE
package sample;
import Habit.Habit;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import Habit.*;
public class Controller {
@FXML Button btnAdd, btnDelete, btnEdit;
Habit habit;
@FXML
public void onBtnAddClick(){
}
}
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.ToolBar?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"
xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<top>
<VBox BorderPane.alignment="CENTER">
<children>
<MenuBar>
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Delete" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About" />
</items>
</Menu>
</menus>
</MenuBar>
<ToolBar prefHeight="40.0" prefWidth="200.0">
<items>
<Button mnemonicParsing="false" text="Habits" />
</items>
</ToolBar>
<ToolBar prefHeight="40.0" prefWidth="200.0">
<items>
<HBox spacing="15.0">
<children>
<Button mnemonicParsing="false" text="Add" fx:id="btnAdd"/>
<Button mnemonicParsing="false" text="Edit" fx:id="btnEdit" />
<Button mnemonicParsing="false" text="Delete" fx:id="btnDelete"/>
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</HBox>
</items>
</ToolBar>
</children>
</VBox>
</top>
<center>
<ScrollPane hbarPolicy="NEVER" BorderPane.alignment="CENTER">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="200.0" />
</content>
</ScrollPane>
</center>
</BorderPane>
0
Dobra poddaje się, proszę o pomoc :D
Wysypuje mi się po stworzeniu stage w HabitController
https://github.com/Xezolpl/Habit-tracker.git