Javafx编程ActionHandler

时间:2016-10-04 04:13:18

标签: java user-interface javafx

我正在尝试做的是当我按下红色按钮时,它会将背景设置为红色,但由于我将其设为私有,因此我的主面板类没有看到我的Button Listener类,所以我不断收到错误。关于我能做什么的任何建议?。

package application;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;


public class ColorFactory extends Application {
    @Override

    public void start(Stage stage)
    {
        BorderPane pane = new BorderPane();
        // sets the width and height
        stage.setHeight(300);
        stage.setWidth(500);

        //calls the mainpanel constructor
        pane.setCenter(new MainPanel());

        //make the mainpanel visible using the setVisible(true)

        //call the stage.setScene
        stage.setScene(new Scene(pane));
        // set title to Color Factory
        stage.setTitle("Color Factory");
        //call stage.show
        stage.show();
    }
    private class MainPanel extends BorderPane
    {


        public MainPanel()
        {
            HBox Tpanel = new HBox(25);
            Tpanel = new HBox(25);
            Tpanel.setPrefWidth(500);
            Tpanel.setPrefHeight(50);
            Tpanel.setAlignment(Pos.TOP_CENTER);
            Button red = new Button("Red");
            Button yellow = new Button("Yellow");
            Button orange = new Button("Orange");
            red.setStyle("-fx-background-color: red");
            orange.setStyle("-fx-background-color: orange;");
            yellow.setStyle("-fx-background-color: yellow;");
            orange.setOnAction(new ButtonListener());
            red.setOnAction(new ButtonListener());
            yellow.setOnAction(new ButtonListener());
            Tpanel.setStyle("-fx-background-color: white;");
            Tpanel.getChildren().addAll(red,yellow,orange);


            HBox Bpanel = new HBox(15);
            Bpanel.setPrefWidth(500);
            Bpanel.setPrefHeight(75);
            RadioButton green = new RadioButton("Green");
            RadioButton  blue = new RadioButton("Blue");
            RadioButton cyan = new RadioButton("Cyan"); 
            blue.setOnAction(new RadioButtonListener());
            green.setOnAction(new RadioButtonListener());
            cyan.setOnAction(new RadioButtonListener());
            green.setStyle("-fx-background-color: green;");
            blue.setStyle("-fx-background-color: blue;");
            cyan.setStyle("-fx-background-color: cyan;");
            Bpanel.setAlignment(Pos.BOTTOM_CENTER);
            Bpanel.getChildren().addAll(green,blue,cyan);

            Label label = new Label("Top buttons change the panel color and bottom radio buttons change the text color");
            label.setAlignment(Pos.CENTER_LEFT);
            label.setTextFill(Color.BLUE);

            setTop(Tpanel);
            setBottom(Bpanel);
            setCenter(label);

            HBox.setMargin(Tpanel, new Insets(5,10,5,10));
            HBox.setMargin(Bpanel, new Insets(5,10,5,10));
            HBox.setMargin(label, new Insets(150,10,5,10));




        }

    }
    private class ButtonListener implements EventHandler<ActionEvent>
    {

        public void handle(ActionEvent event) 
        {

            if(event.getSource() == red)
            {
                red.setStyle("-fx-background-color: red;");
            }
            else if(event.getSource() == yellow)
            {
                yellow.setStyle("-fx-background-color: yellow;");
            }
            else 
            {
                orange.setStyle("-fx-background-color: orange;");
            }
        }
    }
    private class RadioButtonListener implements EventHandler<ActionEvent>
    {
        public void handle(ActionEvent radio)
        {
            if(radio.getSource() == green)
            {
                label.setTextFill(Color.GREEN);
            }
            if(radio.getSource() == blue)
            {
                label.setTextFill(Color.BLUE);
            }
            if(radio.getSource() == cyan)
            {
                label.setTextFill(Color.BLUE);
            }
        }
    }


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

2 个答案:

答案 0 :(得分:1)

那么,你期待什么?这就是“私人”的含义。解决方案 - 只是不要将其设为私有。只是将它打包成私有应该可以工作。

答案 1 :(得分:1)

您的程序无法编译,因为您的按钮和标签在构造函数中只是可见。你可以将他们的定义移到顶级课程,以便其他人可以看到它们。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;


public class ColorFactory extends Application {
    Button red;
    Button yellow;
    Button orange;

    RadioButton green;
    RadioButton  blue;
    RadioButton cyan; 

    Label label;

    @Override
    public void start(Stage stage)
    {
        BorderPane pane = new BorderPane();
        // sets the width and height
        stage.setHeight(300);
        stage.setWidth(500);

        //calls the mainpanel constructor
        pane.setCenter(new MainPanel());

        //make the mainpanel visible using the setVisible(true)

        //call the stage.setScene
        stage.setScene(new Scene(pane));
        // set title to Color Factory
        stage.setTitle("Color Factory");
        //call stage.show
        stage.show();
    }
    private class MainPanel extends BorderPane
    {


        public MainPanel()
        {
            HBox Tpanel = new HBox(25);
            Tpanel = new HBox(25);
            Tpanel.setPrefWidth(500);
            Tpanel.setPrefHeight(50);
            Tpanel.setAlignment(Pos.TOP_CENTER);
            red = new Button("Red");
            yellow = new Button("Yellow");
            orange = new Button("Orange");
            red.setStyle("-fx-background-color: red");
            orange.setStyle("-fx-background-color: orange;");
            yellow.setStyle("-fx-background-color: yellow;");
            orange.setOnAction(new ButtonListener());
            red.setOnAction(new ButtonListener());
            yellow.setOnAction(new ButtonListener());
            Tpanel.setStyle("-fx-background-color: white;");
            Tpanel.getChildren().addAll(red,yellow,orange);


            HBox Bpanel = new HBox(15);
            Bpanel.setPrefWidth(500);
            Bpanel.setPrefHeight(75);
            green = new RadioButton("Green");
            blue = new RadioButton("Blue");
            cyan = new RadioButton("Cyan"); 
            blue.setOnAction(new RadioButtonListener());
            green.setOnAction(new RadioButtonListener());
            cyan.setOnAction(new RadioButtonListener());
            green.setStyle("-fx-background-color: green;");
            blue.setStyle("-fx-background-color: blue;");
            cyan.setStyle("-fx-background-color: cyan;");
            Bpanel.setAlignment(Pos.BOTTOM_CENTER);
            Bpanel.getChildren().addAll(green,blue,cyan);

            label = new Label("Top buttons change the panel color and bottom radio buttons change the text color");
            label.setAlignment(Pos.CENTER_LEFT);
            label.setTextFill(Color.BLUE);

            setTop(Tpanel);
            setBottom(Bpanel);
            setCenter(label);

            HBox.setMargin(Tpanel, new Insets(5,10,5,10));
            HBox.setMargin(Bpanel, new Insets(5,10,5,10));
            HBox.setMargin(label, new Insets(150,10,5,10));




        }

    }
    private class ButtonListener implements EventHandler<ActionEvent>
    {

        public void handle(ActionEvent event) 
        {

            if(event.getSource() == red)
            {
                red.setStyle("-fx-background-color: red;");
            }
            else if(event.getSource() == yellow)
            {
                yellow.setStyle("-fx-background-color: yellow;");
            }
            else 
            {
                orange.setStyle("-fx-background-color: orange;");
            }
        }
    }
    private class RadioButtonListener implements EventHandler<ActionEvent>
    {
        public void handle(ActionEvent radio)
        {
            if(radio.getSource() == green)
            {
                label.setTextFill(Color.GREEN);
            }
            if(radio.getSource() == blue)
            {
                label.setTextFill(Color.BLUE);
            }
            if(radio.getSource() == cyan)
            {
                label.setTextFill(Color.BLUE);
            }
        }
    }


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