How can the text of the label be shown? - javafx

As you can see in the picture, the label in the third box, next to the ComboBox, has the text '...' instead of 'fase'.
I have previously attempted to increase the size of the HBox in which it resides, increasing spacing, but to no avail. Any suggestions?
public void start(Stage primaryStage) {
RadioButtonCustom inhoud = new RadioButtonCustom();
Fieldset fs = new Fieldset("eerste", inhoud);
RadioButtonCustom inhoud2 = new RadioButtonCustom();
Fieldset fs2 = new Fieldset("tweede", inhoud2);
//error
HBox hb = new HBox();
hb.minWidth(200);
Label fase = new Label("fase");
fase.setText("Fase");
fase.minWidth(500);
fase.getStyleClass().add("bordered-titled-title");
StackPane.setAlignment(fase, Pos.CENTER);
ComboBox<Integer> cb = new ComboBox<>();
hb.setSpacing(40);
for (Integer i : array) {
cb.getItems().add(i);
}
hb.getChildren().addAll(fase,cb);
Fieldset fs3 = new Fieldset("fase",hb);
// einde error
VBox vb = new VBox();
vb.getChildren().addAll(fs, fs2,fs3);
vb.setSpacing(20);
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
#Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
BorderPane root = new BorderPane();
root.getChildren().add(vb);
Scene scene = new Scene(root, 500, 500);
scene.getStylesheets().add("/lissa/stijl.css");
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}

Related

Open Image From FileChooser On a Button

enter image description hereI need help I want to open a Image with a button of browse using filechooser on javafx ? how can I do it?
FileChooser f;
File file;
Image img;
ImageView mv;
#Override
public void start(Stage primaryStage)
{
f = new FileChooser();
Button browse = new Button("Browse");
browse.setOnAction((event) ->
{
file = f.showOpenDialog(primaryStage);
img = new Image(file.toURI().toString());
mv = new ImageView(img);
});
mv.setImage(img);
BorderPane root = new BorderPane();
root.setTop(browse);
root.setCenter(mv);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
The start method sets up the scene and shows the window. It completes before the button handler is run and the information you get during it's execution is not available at this time. You need to do modify the scene with the image from the event handler for this reason:
#Override
public void start(Stage primaryStage) {
final FileChooser f = new FileChooser();
final ImageView mv = new ImageView(); // create empty ImageView
Button browse = new Button("Browse");
browse.setOnAction((event) -> {
File file = f.showOpenDialog(primaryStage);
if (file != null) { // only proceed, if file was chosen
Image img = new Image(file.toURI().toString());
mv.setImage(img);
}
});
BorderPane root = new BorderPane();
root.setTop(browse);
root.setCenter(mv);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
Alternatively you could create the ImageView in the event handler and place it in the scene:
#Override
public void start(Stage primaryStage) {
final FileChooser f = new FileChooser();
Button browse = new Button("Browse");
final BorderPane root = new BorderPane();
browse.setOnAction((event) -> {
File file = f.showOpenDialog(primaryStage);
if (file != null) { // only proceed, if file was chosen
Image img = new Image(file.toURI().toString());
ImageView mv = new ImageView(img);
root.setCenter(mv); // add ImageView to scene
}
});
root.setTop(browse);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}

Some nodes won't appear in HBox

I am working on a Yahtzee game just to develop my programming skills and I can't seem to get all the Labels and Radio Buttons to appear in the HBox. Here is all the relevant code:
public class Main extends Application{
Label diceRoll1 = new Label("1");
Label diceRoll2 = new Label("2");
Label diceRoll3 = new Label("3");
Label diceRoll4 = new Label("4");
Label diceRoll5 = new Label("5");
RadioButton holdRButton1 = new RadioButton("Hold");
RadioButton holdRButton2 = new RadioButton("Hold");
RadioButton holdRButton3 = new RadioButton("Hold");
RadioButton holdRButton4 = new RadioButton("Hold");
RadioButton holdRButton5 = new RadioButton("Hold");
Button rollDice = new Button("Roll!");
Stage window;
public static void main(String[] args) {
launch(args);
}
#Override
public void start(Stage primaryStage)throws Exception{
VBox diceRoll1Layout = new VBox(5);
diceRoll1Layout.getChildren().addAll(diceRoll1, holdRButton1);
VBox diceRoll2Layout = new VBox(5);
diceRoll2Layout.getChildren().addAll(diceRoll2, holdRButton2);
VBox diceRoll3Layout = new VBox(5);
diceRoll3Layout.getChildren().addAll(diceRoll3, holdRButton3);
VBox diceRoll4Layout = new VBox(5);
diceRoll4Layout.getChildren().addAll(diceRoll4, holdRButton4);
VBox diceRoll5Layout = new VBox(5);
diceRoll5Layout.getChildren().addAll(diceRoll5, holdRButton5);
HBox diceRolls = new HBox(5);
diceRolls.getChildren().addAll(diceRoll1Layout,diceRoll2Layout,diceRoll3Layout,
diceRoll4Layout,diceRoll5Layout, rollDice);
BorderPane rootPane = new BorderPane();
rootPane.setBottom(diceRolls);
Scene scene = new Scene(rootPane, 400, 500);
window = primaryStage;
window.setTitle("Yahtzee!");
window.setScene(scene);
window.show();
}
}
But for some reason whenever I run the code only diceRoll1, diceRoll2, holdRButton1, holdRButton2 and rollDice appear in the window. They're all coded the same so I don't know why they don't all appear. I tried setting them to visible and it made no difference. Am I missing something?

javafx TabPane show search field in the default dropddown showing hidden tabs

How to set search field for the default drop down on the tab pane in JavaFX ,which shows hidden tab list. and here is my code for tabs on the Tabpane
public void start(Stage primaryStage) {
primaryStage.setTitle("Tabs");
Group root = new Group();
Scene scene = new Scene(root, 400, 250, Color.WHITE);
TabPane tabPane = new TabPane();
BorderPane borderPane = new BorderPane();
for (int i = 0; i < 10; i++) {
Tab tab = new Tab();
tab.setText("Tab" + i);
HBox hbox = new HBox();
hbox.getChildren().add(new Label("Tab" + i));
hbox.setAlignment(Pos.CENTER);
tab.setContent(hbox);
tabPane.getTabs().add(tab);
}
// bind to take available space
borderPane.prefHeightProperty().bind(scene.heightProperty());
borderPane.prefWidthProperty().bind(scene.widthProperty());
borderPane.setCenter(tabPane);
root.getChildren().add(borderPane);
primaryStage.setScene(scene);
primaryStage.show();
}

JavaFX 8 Edit table cell on click of placeholder button

In my TableView I'm using a button as the placeholder when there are no items available in the table. And on click of this button I want to add a new row and then make the first cell in this row editable. I was able to successfully add new row, but the making the first cell editable does not work. I have tried using Platform.runLater to start the editing, but it doesn't work either. Below is the code for what I'm trying to do. Any help would be appreciated. Thanks
public class TableEditTest extends Application {
#Override
public void start(Stage primaryStage) {
TableColumn<Person, String> colA = new TableColumn<>("Name");
colA.setCellFactory(TextFieldTableCell.forTableColumn());
colA.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn<Person, String> colB = new TableColumn<>("Age");
colB.setCellFactory(TextFieldTableCell.forTableColumn());
colB.setCellValueFactory(new PropertyValueFactory<>("age"));
TableColumn<Person, String> colC = new TableColumn<>("Gender");
colC.setCellValueFactory(new PropertyValueFactory<>("gender"));
colC.setCellFactory(TextFieldTableCell.forTableColumn());
TableView<Person> tableView = new TableView<>();
tableView.setEditable(true);
tableView.getColumns().addAll(colA, colB, colC);
Button btn = new Button();
btn.setText("Add Item");
btn.setOnAction((ActionEvent event) -> {
tableView.getItems().add(new Person());
// Edit the first cell
Platform.runLater(() -> {
tableView.edit(0, colA);
});
});
tableView.setPlaceholder(btn);
StackPane root = new StackPane();
root.getChildren().add(tableView);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}

FX 2.x : How do I remove SplitPane?

I can add SplitPane in a XYChart by clicking the "Add Pane" button, and it works fine.
Now I would like to remove SplitPane by clicking the "Remove pane" button.
Here is full code
public class SplitPaneFxTest extends Application {
SplitPane splitPane = new SplitPane();
double percSplit = 0.50;
int idxSplit = 0;
/**
* #param args the command line arguments
*/
public static void main(String[] args) {
launch(SplitPaneFxTest.class, args);
}
#Override
public void start(Stage primaryStage) {
primaryStage.setTitle("SplitPane Test");
Group root = new Group();
Scene scene = new Scene(root, 800, 650, Color.WHITE);
//CREATE THE SPLITPANE
splitPane.setPrefSize(scene.getWidth(), scene.getHeight());
splitPane.setOrientation(Orientation.VERTICAL);
//ADD LAYOUTS AND ASSIGN CONTAINED CONTROLS
BorderPane upperPane = new BorderPane();
HBox hbox = new HBox();
Button button1 = new Button("Add Pane");
hbox.getChildren().addAll(button1);
upperPane.setTop(hbox);
Button button2 = new Button("Remove Pane");
hbox.getChildren().addAll(button2);
upperPane.setTop(hbox);
BorderPane lowerPane = new BorderPane();
splitPane.getItems().addAll(upperPane);
splitPane.setDividerPosition(idxSplit, 0.70);
idxSplit++;
splitPane.getItems().addAll(lowerPane);
idxSplit++;
root.getChildren().add(splitPane);
primaryStage.setScene(scene);
primaryStage.show();
button1.setOnAction(new EventHandler<ActionEvent>() {
#Override public void handle(ActionEvent e) {
BorderPane myborderpane = new BorderPane();
splitPane.getItems().addAll(myborderpane);
ObservableList<SplitPane.Divider> splitDiv = splitPane.getDividers();
System.out.println("splitDiv.size() "+splitDiv.size());
percSplit = 1/(double)(splitDiv.size()+1);
for (int i = 0; i< splitDiv.size(); i++) {
System.out.println("i "+i+" percSplit "+percSplit);
splitPane.setDividerPosition(i, percSplit);
percSplit += 1/(double)(splitDiv.size()+1);
}
}
});
}
}
Any help really appreciated.
You can store a list of inner panes and remove them based on this list:
final List<Pane> panes = new ArrayList<Pane>();
button1.setOnAction(new EventHandler<ActionEvent>() {
#Override
public void handle(ActionEvent e) {
BorderPane myborderpane = new BorderPane();
//adding
panes.add(myborderpane);
splitPane.getItems().addAll(myborderpane);
ObservableList<SplitPane.Divider> splitDiv = splitPane.getDividers();
System.out.println("splitDiv.size() " + splitDiv.size());
percSplit = 1 / (double) (splitDiv.size() + 1);
for (int i = 0; i < splitDiv.size(); i++) {
System.out.println("i " + i + " percSplit " + percSplit);
splitPane.setDividerPosition(i, percSplit);
percSplit += 1 / (double) (splitDiv.size() + 1);
}
}
});
button2.setOnAction(new EventHandler<ActionEvent>() {
#Override
public void handle(ActionEvent t) {
if (panes.size() > 0) {
// removing from both list and splitPane childs
Pane toDelete = panes.remove(0);
splitPane.getItems().remove(toDelete);
}
}
});
Also you can remove panes directly from ScrollPane.getChildren() but it can involve tricky and unreliable code to determine which pane to remove.

Resources