Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
kann mir jemand helfen, zeigen wie ich meine MenuBar und ToolBar zusammen in eine Datei auslagern kann und diese dann später in mehreren anderen Fenstern verwenden?
Java:
package ubung;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.ToolBar;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class ubung extends Application {
@Override
public void start(Stage primaryStage) {
MenuBar menuBar = new MenuBar();
Menu menuFile = new Menu("File");
Menu menuEdit = new Menu("Edit");
menuBar.getMenus().addAll(menuFile, menuEdit);
ToolBar toolBar = new ToolBar(
new Button("New"),
new Button("Open"),
new Button("Save"),
new Button("Clean"),
new Button("Compile"),
new Button("Run"),
new Button("Debug"),
new Button("Profile")
);
VBox vbox = new VBox();
vbox.getChildren().addAll(menuBar, toolBar);
BorderPane borderPane = new BorderPane();
borderPane.setTop(vbox);
StackPane root = new StackPane();
root.getChildren().add(borderPane);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Übung 1");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Ich habe vor kurzen mit OSGi und den notwendigsten Teilen von e4 (für die Dependency Ijection) eine kleine Platform geschrieben, das eigentlich nur aus einem Menü, einer Toolbar (solange kein Plugin hier etwas eingestellt hat, ist die Toolbar aber unsichtbar) und einem Panel der eine Accordion und ein TabPane enthält, sowie eine Statuszeile.
Während der OSGi- und DI-Teil für dich vielleicht eher Overkill ist, ist das UI der Navigation grob im Stil eines Master-Detail-Blocks für dich vielleicht interessant. Die Frage ob du Eclipse oder NetBeans verwendest ist insofern interessant, weil ich unter Eclipse das Plugin e(fx)clipse verwende und die meisten UIs nicht in Code sondern in FXGraph - einer DSL, die zu FXML-Dateien übersetzt wird - schreibe.
Code:
package my.platform.app.ui.layout
import javafx.scene.layout.HBox
import javafx.scene.layout.BorderPane
import javafx.scene.control.MenuBar
import javafx.scene.control.Menu
import javafx.scene.control.MenuItem
import javafx.scene.control.TextField
import javafx.scene.control.Label
import javafx.scene.control.ProgressBar
import javafx.scene.control.Button
import javafx.geometry.Insets
import javafx.scene.control.SplitPane
import javafx.scene.control.Accordion
import javafx.scene.control.TitledPane
import javafx.scene.control.TabPane
import javafx.scene.layout.VBox
import javafx.scene.control.ToolBar
import javafx.scene.input.KeyCodeCombination
import javafx.scene.input.KeyCharacterCombination
import my.platform.app.ui.RootController
import java.lang.Double
import javafx.scene.control.ScrollPane
import javafx.scene.control.SeparatorMenuItem
component Root controlledby RootController resourcefile "../../res/strings/strings.properties" styledwith
"/css/default.css" {
BorderPane {
top : VBox id vboxMenuToolBar {
children : [
MenuBar id menuBar {
menus : [
Menu id menuFile {
text : rstring "menu.file",
items : [
MenuItem id menuItemSave {
disable : true,
text : rstring "menu.file.save",
accelerator : rstring "menu.file.save.accel",
onAction : controllermethod menuItemSave
},
MenuItem id menuItemSaveAs {
disable : true,
text : rstring "menu.file.saveAs",
accelerator : rstring "menu.file.saveAs.accel",
onAction : controllermethod menuItemSaveAs
},
MenuItem id menuItemSaveAll {
disable : true,
text : rstring "menu.file.saveAll",
onAction : controllermethod menuItemSaveAll
},
SeparatorMenuItem id menuItemFileAddition {
visible : false
},
SeparatorMenuItem id menuItemFilePreExit {
visible : true
},
MenuItem id menuItemExit {
text : rstring "menu.file.exit",
accelerator : rstring "menu.file.exit.accel",
onAction : controllermethod handleMenuItemExit
}
]
},
Menu id menuSettings {
text : rstring "menu.settings",
items : [
SeparatorMenuItem id menuItemSettingsAddition {
visible : false
},
SeparatorMenuItem id menuItemSettingsPreSettings {
visible : false
},
MenuItem id menuItemAppSettings {
text : rstring "menu.settings.app",
onAction : controllermethod menuItemAppSettings
}
]
},
Menu id menuHelp {
text : rstring "menu.help",
items : [
SeparatorMenuItem id menuItemHelpAddition {
visible : false
},
SeparatorMenuItem id menuItemHelpPreAbout {
visible : false
},
MenuItem id menuItemAbout {
text : rstring "menu.help.about",
onAction : controllermethod handleMenuItemAbout
}
]
}
]
},
ToolBar id toolBar {
visible : false,
minHeight : 0,
maxHeight : 0 // const ToolBar#USE_PREF_SIZE
}
], static margin : Insets {
top : 25,
bottom : 5
}
},
center : SplitPane id splitPaneBody {
items : [
ScrollPane id scrollPaneNavigation {
hbarPolicy : "AS_NEEDED",
vbarPolicy : "AS_NEEDED",
prefWidth : 250,
fitToHeight : true,
fitToWidth : true,
content : Accordion id accordionNavigation {
minWidth : const Accordion#USE_PREF_SIZE,
minHeight : const Accordion#USE_PREF_SIZE
}
},
ScrollPane id scrollPaneContent {
hbarPolicy : "AS_NEEDED",
vbarPolicy : "AS_NEEDED",
prefWidth : 500,
maxWidth : const Double#MAX_VALUE,
fitToHeight : true,
fitToWidth : true,
content : TabPane id tabPaneContent {
minWidth : const TabPane#USE_PREF_SIZE,
minHeight : const TabPane#USE_PREF_SIZE
}
}
], static margin : Insets {
left : 2,
right : 2
}
},
bottom : HBox id hboxStatus {
spacing : 5, Label id labelStatus {
maxWidth : const Double#MAX_VALUE,
alignment : "CENTER_LEFT", static margin : Insets {
left : 5
}, static hgrow : "ALWAYS"
}, ProgressBar id progressStatus {
visible : false,
maxHeight : 50, static margin : Insets {
left : 5
}, static hgrow : "NEVER"
}, Button id buttonCancel {
visible : false,
onAction : controllermethod handleButtonCancel,
alignment : "CENTER_RIGHT", static margin : Insets {
right : 5
}, static hgrow : "NEVER"
}, static margin : Insets {
top : 5
}, static alignment : "CENTER", static margin : Insets {
top : 5,
left : 2,
right : 2,
bottom : 2
}
}
}
}
Das Ganze wird dann in folgendes FXML-Dokument umgewandelt, dass du dann im Code über den FXMLLoader laden kannst:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
Wie das aussehen kann, siehst du im Anhang - die Transparenz und die Fensterdekoration werden über CSS und das jar "Undecorator" gemacht (bin ich mal drüber gestolpert)...