在javaFx中创建对象的类中,为另一个类(视为组件)的对象内部的组件创建操作事件?
CustomItem类别:在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
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);
}
}