Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javaFx中创建对象的类中,为另一个类(视为组件)的对象内部的组件创建操作事件?_Java_Object_Javafx_Javafx 2_Actionevent - Fatal编程技术网

在javaFx中创建对象的类中,为另一个类(视为组件)的对象内部的组件创建操作事件?

在javaFx中创建对象的类中,为另一个类(视为组件)的对象内部的组件创建操作事件?,java,object,javafx,javafx-2,actionevent,Java,Object,Javafx,Javafx 2,Actionevent,CustomItem类别: public class MenuItem { private GridPane menuItem; private Label itemCode,itemPrice; private TextArea itemName; public MenuItem(){ itemCode=new Label(); itemName=new TextArea(); itemPrice=new Label(); } public GridPane get

CustomItem类别:

public class MenuItem {
private GridPane menuItem;
private Label itemCode,itemPrice;
private TextArea itemName;

public MenuItem(){
    itemCode=new Label();
    itemName=new TextArea();
    itemPrice=new Label();
}

public GridPane getMenuItemBox(){
    menuItem=new GridPane();

    menuItem.add(itemCode, 0, 0);
    menuItem.add(itemName, 0, 1);
    menuItem.add(itemPrice, 0, 2);


    return menuItem;
}
控制器类:(将在其中创建并添加上述类的对象)

public类ItemController实现可初始化{
@FXML
private FlowPane mainCategory,itemSection;
@凌驾
公共void初始化(URL arg0,ResourceBundle arg1){

对于(inti=0;i只需在
MenuItem
类中定义方法来注册处理程序

public class MenuItem {

    private GridPane menuItem;
    private Label itemCode,itemPrice;
    private TextArea itemName;

    public MenuItem(){
        itemCode=new Label();
        itemName=new TextArea();
        itemPrice=new Label();
    }

    public GridPane getMenuItemBox(){
        menuItem=new GridPane();

        menuItem.add(itemCode, 0, 0);
        menuItem.add(itemName, 0, 1);
        menuItem.add(itemPrice, 0, 2);


        return menuItem;
    }

    public <E extends Event> void addCodeHandler(EventType<E> eventType, EventHandler<E> handler) {
        itemCode.addEventHandler(eventType, handler);
    }

    public <E extends Event> void addPriceHandler(EventType<E> eventType, EventHandler<E> handler) {
        itemPrice.addEventHandler(eventType, handler);
    }

    public <E extends Event> void removeCodeHandler(EventType<E> eventType, EventHandler<E> handler) {
        itemCode.removeEventHandler(eventType, handler);
    }

    public <E extends Event> void removePriceHandler(EventType<E> eventType, EventHandler<E> handler) {
        itemPrice.removeEventHandler(eventType, handler);
    }

}
等等

这种方法避免了将标签作为字段或通过方法从类中公开

下面是一个完整的示例,您可以运行:

import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.event.EventType;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class CustomComponentWithEventHandling extends Application {

    @Override
    public void start(Stage primaryStage) {
        FlowPane itemSelection = new FlowPane();
        for (int i = 1 ; i <= 10; i++)  {
            MenuItem item = new MenuItem();
            String itemCode = "Item "+i;
            item.setItemCode(itemCode);
            item.setItemPrice(100);

            item.addCodeHandler(MouseEvent.MOUSE_CLICKED, e -> {
                System.out.println("Clicked on label for "+itemCode);
            });

            item.addPriceHandler(MouseEvent.MOUSE_CLICKED, e -> {
                System.out.println("Clicked on price for "+itemCode);
            });

            itemSelection.getChildren().add(item.getMenuItemBox());
        }

        Scene scene = new Scene(new ScrollPane(itemSelection), 800, 800);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public class MenuItem {

        private GridPane menuItem;
        private Label itemCode,itemPrice;
        private TextArea itemName;

        public MenuItem(){
            itemCode=new Label();
            itemName=new TextArea();
            itemPrice=new Label();
        }

        public GridPane getMenuItemBox(){
            menuItem=new GridPane();

            menuItem.add(itemCode, 0, 0);
            menuItem.add(itemName, 0, 1);
            menuItem.add(itemPrice, 0, 2);


            return menuItem;
        }

        public void setItemCode(String itemCode) {
            this.itemCode.setText(itemCode);
        }

        public void setItemPrice(double itemPrice) {
            this.itemPrice.setText(String.valueOf(itemPrice));
        }

        public <E extends Event> void addCodeHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemCode.addEventHandler(eventType, handler);
        }

        public <E extends Event> void addPriceHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemPrice.addEventHandler(eventType, handler);
        }

        public <E extends Event> void removeCodeHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemCode.removeEventHandler(eventType, handler);
        }

        public <E extends Event> void removePriceHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemPrice.removeEventHandler(eventType, handler);
        }

    }

    public static void main(String[] args) {
        launch(args);
    }
}
导入javafx.application.application;
导入javafx.event.event;
导入javafx.event.EventHandler;
导入javafx.event.EventType;
导入javafx.scene.scene;
导入javafx.scene.control.Label;
导入javafx.scene.control.ScrollPane;
导入javafx.scene.control.TextArea;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.layout.FlowPane;
导入javafx.scene.layout.GridPane;
导入javafx.stage.stage;
公共类CustomComponentWithEventHandling扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
FlowPane itemSelection=新建FlowPane();
对于(int i=1;i{
System.out.println(“单击“+项目代码”的标签);
});
item.addPriceHandler(MouseEvent.MOUSE_单击,e->{
System.out.println(“点击“+项目代码”的价格);
});
itemSelection.getChildren().add(item.getMenuItemBox());
}
场景=新场景(新滚动窗格(项目选择),800800);
初级阶段。场景(场景);
primaryStage.show();
}
公共类菜单项{
私有网格窗格菜单项;
自有标签项目代码、项目价格;
私有文本区域项目名称;
公共菜单项(){
itemCode=新标签();
itemName=newtextarea();
itemPrice=新标签();
}
公共网格窗格getMenuItemBox(){
menuItem=新建网格窗格();
menuItem.add(itemCode,0,0);
menuItem.add(itemName,0,1);
menuItem.add(itemPrice,0,2);
返回菜单项;
}
公共无效setItemCode(字符串itemCode){
this.itemCode.setText(itemCode);
}
公共作废setItemPrice(双重itemPrice){
this.itemPrice.setText(String.valueOf(itemPrice));
}
public void addCodeHandler(EventType、EventType、EventHandler){
addEventHandler(事件类型,处理程序);
}
public void addPriceHandler(EventType、EventType、EventHandler){
addEventHandler(事件类型,处理程序);
}
public void removeCodeHandler(EventType、EventType、EventHandler){
removeEventHandler(事件类型,处理程序);
}
public void removePriceHandler(EventType、EventType、EventHandler){
removeEventHandler(事件类型,处理程序);
}
}
公共静态void main(字符串[]args){
发射(args);
}
}

只需在
MenuItem
类中定义方法来注册处理程序

public class MenuItem {

    private GridPane menuItem;
    private Label itemCode,itemPrice;
    private TextArea itemName;

    public MenuItem(){
        itemCode=new Label();
        itemName=new TextArea();
        itemPrice=new Label();
    }

    public GridPane getMenuItemBox(){
        menuItem=new GridPane();

        menuItem.add(itemCode, 0, 0);
        menuItem.add(itemName, 0, 1);
        menuItem.add(itemPrice, 0, 2);


        return menuItem;
    }

    public <E extends Event> void addCodeHandler(EventType<E> eventType, EventHandler<E> handler) {
        itemCode.addEventHandler(eventType, handler);
    }

    public <E extends Event> void addPriceHandler(EventType<E> eventType, EventHandler<E> handler) {
        itemPrice.addEventHandler(eventType, handler);
    }

    public <E extends Event> void removeCodeHandler(EventType<E> eventType, EventHandler<E> handler) {
        itemCode.removeEventHandler(eventType, handler);
    }

    public <E extends Event> void removePriceHandler(EventType<E> eventType, EventHandler<E> handler) {
        itemPrice.removeEventHandler(eventType, handler);
    }

}
等等

这种方法避免了将标签作为字段或通过方法从类中公开

下面是一个完整的示例,您可以运行:

import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.event.EventType;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class CustomComponentWithEventHandling extends Application {

    @Override
    public void start(Stage primaryStage) {
        FlowPane itemSelection = new FlowPane();
        for (int i = 1 ; i <= 10; i++)  {
            MenuItem item = new MenuItem();
            String itemCode = "Item "+i;
            item.setItemCode(itemCode);
            item.setItemPrice(100);

            item.addCodeHandler(MouseEvent.MOUSE_CLICKED, e -> {
                System.out.println("Clicked on label for "+itemCode);
            });

            item.addPriceHandler(MouseEvent.MOUSE_CLICKED, e -> {
                System.out.println("Clicked on price for "+itemCode);
            });

            itemSelection.getChildren().add(item.getMenuItemBox());
        }

        Scene scene = new Scene(new ScrollPane(itemSelection), 800, 800);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public class MenuItem {

        private GridPane menuItem;
        private Label itemCode,itemPrice;
        private TextArea itemName;

        public MenuItem(){
            itemCode=new Label();
            itemName=new TextArea();
            itemPrice=new Label();
        }

        public GridPane getMenuItemBox(){
            menuItem=new GridPane();

            menuItem.add(itemCode, 0, 0);
            menuItem.add(itemName, 0, 1);
            menuItem.add(itemPrice, 0, 2);


            return menuItem;
        }

        public void setItemCode(String itemCode) {
            this.itemCode.setText(itemCode);
        }

        public void setItemPrice(double itemPrice) {
            this.itemPrice.setText(String.valueOf(itemPrice));
        }

        public <E extends Event> void addCodeHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemCode.addEventHandler(eventType, handler);
        }

        public <E extends Event> void addPriceHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemPrice.addEventHandler(eventType, handler);
        }

        public <E extends Event> void removeCodeHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemCode.removeEventHandler(eventType, handler);
        }

        public <E extends Event> void removePriceHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemPrice.removeEventHandler(eventType, handler);
        }

    }

    public static void main(String[] args) {
        launch(args);
    }
}
导入javafx.application.application;
导入javafx.event.event;
导入javafx.event.EventHandler;
导入javafx.event.EventType;
导入javafx.scene.scene;
导入javafx.scene.control.Label;
导入javafx.scene.control.ScrollPane;
导入javafx.scene.control.TextArea;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.layout.FlowPane;
导入javafx.scene.layout.GridPane;
导入javafx.stage.stage;
公共类CustomComponentWithEventHandling扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
FlowPane itemSelection=新建FlowPane();
对于(int i=1;i{
System.out.println(“单击“+项目代码”的标签);
});
item.addPriceHandler(MouseEvent.MOUSE_单击,e->{
System.out.println(“点击“+项目代码”的价格);
});
itemSelection.getChildren().add(item.getMenuItemBox());
}
场景=新场景(新滚动窗格(项目选择),800800);
初级阶段。场景(场景);
primaryStage.show();
}
公共类菜单项{
私有网格窗格菜单项;
自有标签项目代码、项目价格;
私有文本区域项目名称;
公共菜单项(){
itemCode=新标签();
itemName=newtextarea();
itemPrice=新标签();
}
公共网格窗格getMenuItemBox(){
menuItem=新建网格窗格();
menuItem.add(itemCode,0,0);
menuItem.add(itemName,0,1);
menuItem.add(itemPrice,0,2);
返回菜单项;
}
公共无效setItemCode(字符串itemCode){
this.itemCode.setText(itemCode);
}
公共作废setItemPrice(双重itemPrice){
this.itemPrice.setText(String.valueOf(itemPrice));
}
public void addCodeHandler(EventType、EventType、EventHandler){
addEventHandler(事件类型,处理程序);
}
public void addPriceHandler(EventType、EventType、EventHandler){
addEventHandler(事件类型,处理程序);
}
public void removeCodeHandler(EventType、EventType、EventHandler){
removeEventHandler(事件类型,处理程序);
}
public void removePriceHandler(EventType、EventType、EventHandler){
removeEventHandler(事件类型,处理程序);
}
}
公共静态void main(字符串[]args){
import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.event.EventType;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class CustomComponentWithEventHandling extends Application {

    @Override
    public void start(Stage primaryStage) {
        FlowPane itemSelection = new FlowPane();
        for (int i = 1 ; i <= 10; i++)  {
            MenuItem item = new MenuItem();
            String itemCode = "Item "+i;
            item.setItemCode(itemCode);
            item.setItemPrice(100);

            item.addCodeHandler(MouseEvent.MOUSE_CLICKED, e -> {
                System.out.println("Clicked on label for "+itemCode);
            });

            item.addPriceHandler(MouseEvent.MOUSE_CLICKED, e -> {
                System.out.println("Clicked on price for "+itemCode);
            });

            itemSelection.getChildren().add(item.getMenuItemBox());
        }

        Scene scene = new Scene(new ScrollPane(itemSelection), 800, 800);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public class MenuItem {

        private GridPane menuItem;
        private Label itemCode,itemPrice;
        private TextArea itemName;

        public MenuItem(){
            itemCode=new Label();
            itemName=new TextArea();
            itemPrice=new Label();
        }

        public GridPane getMenuItemBox(){
            menuItem=new GridPane();

            menuItem.add(itemCode, 0, 0);
            menuItem.add(itemName, 0, 1);
            menuItem.add(itemPrice, 0, 2);


            return menuItem;
        }

        public void setItemCode(String itemCode) {
            this.itemCode.setText(itemCode);
        }

        public void setItemPrice(double itemPrice) {
            this.itemPrice.setText(String.valueOf(itemPrice));
        }

        public <E extends Event> void addCodeHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemCode.addEventHandler(eventType, handler);
        }

        public <E extends Event> void addPriceHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemPrice.addEventHandler(eventType, handler);
        }

        public <E extends Event> void removeCodeHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemCode.removeEventHandler(eventType, handler);
        }

        public <E extends Event> void removePriceHandler(EventType<E> eventType, EventHandler<E> handler) {
            itemPrice.removeEventHandler(eventType, handler);
        }

    }

    public static void main(String[] args) {
        launch(args);
    }
}