JavaFX 2.0 Activer un menu comme un MenuItem
Je suis en train de faire un MenuBar
et je wan pas la fonctionnalité d'appuyer sur un Menu
comme: "Fichier", puis d'exécuter une action. Telles que l'ouverture d'un autre fxml, ou un exemple où la sortie est écrite.
Je veux la fonctionnalité d'une MenuItem
(mensonge "à Propos") dans un Menu
comme "Fichier".
package model;
import static java.lang.System.out;
import javafx.application.Application;
import javafx.beans.property.ReadOnlyDoubleProperty;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.geometry.Side;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
/**
* Example of creating menus in JavaFX.
*
* @author Dustin
*/
public class JavaFxMenus extends Application
{
/**
* Build menu bar with included menus for this demonstration.
*
* @param menuWidthProperty Width to be bound to menu bar width.
* @return Menu Bar with menus included.
*/
private MenuBar buildMenuBarWithMenus(final ReadOnlyDoubleProperty menuWidthProperty)
{
final MenuBar menuBar = new MenuBar();
//Prepare left-most 'File' drop-down menu
final Menu fileMenu = new Menu("File");
menuBar.getMenus().add(fileMenu);
//menuBar.getOnMouseClicked().handle(this);
//Prepare 'Examples' drop-down menu
final Menu examplesMenu = new Menu("JavaFX 2.0 Examples");
examplesMenu.getItems().add(new MenuItem("Text Example"));
examplesMenu.getItems().add(new MenuItem("Objects Example"));
examplesMenu.getItems().add(new MenuItem("Animation Example"));
menuBar.getMenus().add(examplesMenu);
//Prepare 'Help' drop-down menu
final Menu helpMenu = new Menu("Help");
helpMenu.setOnAction(null);
final MenuItem searchMenuItem = new MenuItem("Search");
searchMenuItem.setDisable(true);
helpMenu.getItems().add(searchMenuItem);
final MenuItem onlineManualMenuItem = new MenuItem("Online Manual");
onlineManualMenuItem.setVisible(false);
helpMenu.getItems().add(onlineManualMenuItem);
helpMenu.getItems().add(new SeparatorMenuItem());
final MenuItem aboutMenuItem =
MenuItemBuilder.create()
.text("About")
.onAction(
new EventHandler<ActionEvent>()
{
@Override public void handle(ActionEvent e)
{
out.println("You clicked on About!");
}
})
.accelerator(
new KeyCodeCombination(
KeyCode.A, KeyCombination.CONTROL_DOWN))
.build();
helpMenu.getItems().add(aboutMenuItem);
menuBar.getMenus().add(helpMenu);
//bind width of menu bar to width of associated stage
menuBar.prefWidthProperty().bind(menuWidthProperty);
return menuBar;
}
/**
* Start of JavaFX application demonstrating menu support.
*
* @param stage Primary stage.
*/
@Override
public void start(final Stage stage)
{
stage.setTitle("Creating Menus with JavaFX 2.0");
final Group rootGroup = new Group();
final Scene scene = new Scene(rootGroup, 800, 400, Color.WHEAT);
final MenuBar menuBar = buildMenuBarWithMenus(stage.widthProperty());
rootGroup.getChildren().add(menuBar);
stage.setScene(scene);
stage.show();
}
/**
* Main executable function for running examples.
*
* @param arguments Command-line arguments: none expected.
*/
public static void main(final String[] arguments)
{
Application.launch(arguments);
}
}
source d'informationauteur haakonlu
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, UN
Menu
si n'a pas ajouté sous-menu ouMenuitem
s, ne pas déclencher des événements ni sur un clic, sur la montre, ni à cacher. Cependant, la solution de contournement consiste à définir sa charte graphique où ce graphique nœud poignée de clics de souris par exemple,Un inconvénient de cette approche est que l'étiquette ne couvrent pas tous les espaces du menu résultant en cliquant sur les bords de menu n'est pas le déclenchement de l'événement de la souris. Voir en décommentant la
menuLabel.setStyle
ligne ci-dessus. Mais cela peut être résolu en jouant avecCSS
styles je pense.Le Code est partiellement prises de Créer une boîte de Dialogue à l'aide de l'Étape. Vous pouvez également charger un
FXML
fichier dans lemyDialog
scène à l'aide de laFXMLLoader
. Il y a beaucoup d'exemples à ce sujet sur le net.Récemment, j'ai eu le même problème, c'est ce que j'ai fait
Récemment, j'ai été confronté au même problème, c'était ma façon:
J'ai eu un menuItem dans le menu, qui était de se comporter comme si le menuItem est cliqué (dans votre cas
File
menu). Donc ce que vous pouvez faire est d'avoir un menuItemDummy_menuItem
puis sur cliquez de
File
menu, le feu de laDummy_menuItem
menuItem ou toutes les fonctionnalités que vous souhaitez avoir. Pour identifier le menu qui doit avoir cette propriété, j'ai utilisénumberOfMenuItems
pour obtenir le nombre de menuItems dans les menus dans la barre de menule résultat est que le
Dummy_menuItem
est déclenché sans le contexte de l'affichage de la menuItem sur cliquez deFile
menu ou un menu a un menuItem. Il semble donc que si vous avez cliqué sur leFile
menu et ont été redirigés vers une autre page ou quoi que ce soit.Espérons que cette aide!!
Combinant avec la réponse de notre ami @Dota2j'ai construit une classe d'assistance pour déclencher la
Menu
'sonAction(Menu menu)
événement, même si elle n'a pas deMenuItem
à l'intérieur. Voici l'assistance statique méthode:Puis vous appelez le:
Et c'est prêt! J'espère que cette aide.
Je pense que vous ne pouvez pas permettre à toute action sur le Menu principal de l'étiquette.
Toutefois, vous pouvez créer un stackpane, et le remplir avec du texte et une barre de menu.