【问题标题】:How to use the .setVisible() method?如何使用 .setVisible() 方法?
【发布时间】:2017-04-02 23:00:08
【问题描述】:

我的程序应该在按下按钮 (rbutton1) 时显示图像,并且我应该使用 setVisible(true),但我无法为 rbutton1 工作的事件处理程序。

public static ArrayList<Piece> read( String fileName ) 方法读取二进制文件。

package project4;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.RadioButton;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;


public class Project4 extends Application {

    Body b;
    Head head1, head2;
    Hat hat1, hat2;
    Weapon w1, w2, w3;
    Companion c1, c2, c3;

    @Override
    public void start(Stage primaryStage) {
        //fetch objects
        ArrayList<Piece> pieces = read("pieces.dat");

        //parent pane, one row only, 
        //contains Pane int he left column for images, and a grid pane in the right for controls
        GridPane root = new GridPane();

        //pane for images
        Pane granny = new Pane();
        root.add(granny, 0, 0);

        //load images
        for (Piece p : pieces) {
            //only the body starts visible
            if (p instanceof Body) {
                granny.getChildren().add(((Body) p).image);
                b = (Body) p;
            } //everything else is added in the right place but is made invisible
            else if (p instanceof Head) {
                granny.getChildren().add(((Head) p).image);
                if (head1 == null) {
                    head1 = (Head) p;
                } else {
                    head2 = (Head) p;
                }
            } else if (p instanceof Hat) {
                granny.getChildren().add(((Hat) p).image);
                if (hat1 == null) {
                    hat1 = (Hat) p;
                } else {
                    hat2 = (Hat) p;
                }
            } else if (p instanceof Weapon) {
                granny.getChildren().add(((Weapon) p).image);
                if (w1 == null) {
                    w1 = (Weapon) p;
                } else if (w2 == null) {
                    w2 = (Weapon) p;
                } else {
                    w3 = (Weapon) p;
                }
            } else if (p instanceof Companion) {
                granny.getChildren().add(((Companion) p).image);
                if (c1 == null) {
                    c1 = (Companion) p;
                } else if (c2 == null) {
                    c2 = (Companion) p;
                } else {
                    c3 = (Companion) p;
                }
            }

        }

        //controls pane
        GridPane controls = new GridPane();
        controls.setAlignment(Pos.TOP_CENTER);
        controls.setPadding(new Insets(10, 10, 10, 10));
        controls.setHgap(15);
        controls.setVgap(15);

        Label headLabel = new Label("Choose Head:");
        RadioButton rbutton1 = new RadioButton("Esme with bees");
        CheckBox check1 = new CheckBox("Face the other way");
        RadioButton rbutton2 = new RadioButton("Esme normal");
        CheckBox check2 = new CheckBox("Face the other way");
        Label hatLabel = new Label("Choose Hat:");
        RadioButton rbutton3 = new RadioButton("Disreputable hat");
        RadioButton rbutton4 = new RadioButton("Hat with pins");
        RadioButton rbutton5 = new RadioButton("No hat");
        Label weaponLabel = new Label("Weapon:");
        ComboBox< String> cbox = new ComboBox<>();
        cbox.getItems().addAll(
                "broom",
                "scythe",
                "stick"
        );
        Label companionLabel = new Label("Companion:");
        ListView<String> clv = new ListView<>();
        clv.getItems().addAll("DEATH of Rats", "Gaspode", "Luggage");
        clv.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
        clv.setPrefSize(2, 90);

        Button exportButton = new Button("Export Character");
        Label exportFileName = new Label("export.oscar.dat");

        ToggleGroup group = new ToggleGroup();
        rbutton1.setToggleGroup(group);
        rbutton2.setToggleGroup(group);

        ToggleGroup group2 = new ToggleGroup();
        rbutton3.setToggleGroup(group2);
        rbutton4.setToggleGroup(group2);
        rbutton5.setToggleGroup(group2);

        controls.add(headLabel, 1, 5);
        controls.add(rbutton1, 2, 6);
        controls.add(check1, 3, 6);
        controls.add(rbutton2, 2, 7);
        controls.add(check2, 3, 7);
        controls.add(hatLabel, 1, 8);
        controls.add(rbutton3, 2, 9);
        controls.add(rbutton4, 2, 10);
        controls.add(rbutton5, 2, 11);
        controls.add(weaponLabel, 1, 13);
        controls.add(cbox, 2, 14);
        controls.add(companionLabel, 1, 15);
        controls.add(clv, 2, 16);
        controls.add(exportButton, 2, 17);
        controls.add(exportFileName, 3, 17);





        rbutton1.setOnAction(new EventHandler<ActionEvent>() {


            @Override
            public void handle(ActionEvent event) {





            }

        });





        root.add(controls, 1, 0);

        Scene scene = new Scene(root, 900, 700);

        primaryStage.setScene(scene);

        primaryStage.show();
    }

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

    /* read the file - Binary I/O
     * input - String fileName
     * returns ArrayList<Piece> of objects
     */
    public static ArrayList<Piece> read( String fileName ) {
        ArrayList<Piece> pieces = new ArrayList<>();
        //try with resources
        try ( ObjectInputStream in = new ObjectInputStream( new FileInputStream( fileName ) ) ) {;
            //flag should keep reading
            boolean go = true;
            //if the flag still gives the go ahead
            while( go ) {
                //try to read
                try{ 
                    //read, set the image dimensions and position, add to arraylist
                    Piece p = (Piece)in.readObject();
                    p.setImage();
                    pieces.add( p );
                //if there is no more left to read, an IO exception will be thrown  
                } catch( IOException ex ) {
                    //set the flag to signal end of file
                    go = false;
                }  
            }
        //neede dexception catches for this type of stream
        } catch( IOException ioex ) {
            System.out.println( "Input file is missing. " + ioex.getMessage() );
            System.exit( -1 );
        } catch ( ClassNotFoundException cnfex ) {
            System.out.println( "Incompatible class. " );
            System.exit( -1 );
        }

        //return the list with objects from the file
        return pieces;
    }

【问题讨论】:

    标签: java javafx file-io binaryfiles


    【解决方案1】:

    你不想在按钮上设置处理程序,而是在组上设置它:

    group1.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
       @Override
       public void changed(ObservableValue<? extends Toggle> ov, Toggle t, Toggle t1)
           {
           // Do what you want inside
    
       });
    

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多