JavaFX编程ActionHandler

标签 java user-interface javafx

我想做的是,当我按下红色按钮时,它会将背景设置为红色,但由于我将其设置为私有(private),所以我的主面板类看不到我的按钮监听器类,所以我不断收到错误。对我能做什么有什么建议吗?

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);
    }
}

最佳答案

您的程序无法编译,因为您的按钮和标签在构造函数内局部可见。您必须将它们的定义移至顶级类,以便其他人可以看到它们。

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);
    }
}

关于JavaFX编程ActionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39844058/

相关文章:

java - java servlet中初始化参数的使用

Java 和 exec 命令 - 通过管道传输多个命令

JavaFX - ObservableList 和列表项的变化

javafx - 在 JavaFX TableView 中插入行并开始编辑无法正常工作

java - 从 JavaFX Openjfx Dialogs 元素中设计对话框样式

java - 四叉树删除

java - 关于Java线程的问题,输出一致

java - 从任何地方访问数据

android - 如何创建透明半圆?

python - 如何阻止图像被推离屏幕?