Java FXML问题 - 没有生成行

时间:2016-12-20 20:20:42

标签: java eclipse user-interface javafx fxml

作为一名编程学生,我有一些项目正在进行中。一个项目是旅行商问题。 (https://en.wikipedia.org/wiki/Travelling_salesman_problem)。我有一个JAVAFX GUI的问题。我不知道如何在fxml中实现for循环,因为我需要从已检查城市到另一个已检查城市的所有行。 [1]:https://i.stack.imgur.com/wb8h3.png(已检查的城市是苏黎世,格拉鲁斯和贝林佐纳 - >所以我需要一些线来连接它们)。我只是想动态创建一些线条。所以你可以帮我解决这个问题吗?

这是控制器。

package tsprealone:

import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.RadioButton;
import javafx.scene.shape.Line;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;

/**
 *
 * @author kbwschuler
 */
public class FXMLDocumentController implements Initializable {

    @FXML
    private AnchorPane anchorPane;
    @FXML
    private ImageView img;
    @FXML
    private Line line;
    public ArrayList<Line> getLines() {
        return lines;
    }

    public void setLines(ArrayList<Line> lines) {
        this.lines = lines;
    }

    private ArrayList<Stadt> stadte = new ArrayList<Stadt>();
    @FXML
    private ArrayList<Line> lines = new ArrayList<Line>();
    @FXML
    private Button test;
    @FXML
    private RadioButton zug;
    @FXML
    private RadioButton zurich;
    @FXML
    private RadioButton schaffhausen;
    @FXML
    private RadioButton stgallen;
    @FXML
    private RadioButton aarau;
    @FXML
    private RadioButton chur;
    @FXML
    private RadioButton glarus;
    @FXML
    private RadioButton frauenfeld;
    @FXML
    private RadioButton schwyz;
    @FXML
    private RadioButton luzern;
    @FXML
    private RadioButton sarnen;
    @FXML
    private RadioButton bellinzona;
    @FXML
    private RadioButton sion;
    @FXML
    private RadioButton liestal;
    @FXML
    private RadioButton bern;
    @FXML
    private RadioButton delemont;
    @FXML
    private RadioButton solothurn;
    @FXML
    private RadioButton fribourg;
    @FXML
    private RadioButton neuchatel;
    @FXML
    private RadioButton lausanne;
    @FXML
    private RadioButton genf;
    @FXML
    private RadioButton altdorf;
    @FXML
    private RadioButton stans;
    @FXML
    private RadioButton basel;
    @FXML
    private RadioButton appenzell;
    @FXML
    private RadioButton herisau;
    private ArrayList<Stadt> ausgewaehlt = new ArrayList<Stadt>(); //check if is checked

    @FXML
    private void handleButtonAction(ActionEvent event) {
        //starter();
        for (Stadt s : stadte) {
            if (s.isIsClicked()) {
                ausgewaehlt.add(s);
            }
        }
        for (Stadt a : ausgewaehlt) {
            System.out.println(a.getName());


            line.setStartX(ausgewaehlt.get(0).getxCoord());
            line.setStartY(ausgewaehlt.get(0).getyCoord());
            line.setEndX(ausgewaehlt.get(1).getxCoord());
            line.setEndY(ausgewaehlt.get(1).getyCoord());
            lines.add(line);
            //for the beginning I just wanted to add the first two citys 
        }
    }

    public void starter() {
        stadte.add(new Stadt("Zug", zug.getLayoutX(), zug.getLayoutY(), check(zug)));
        stadte.add(new Stadt("Zürich", zurich.getLayoutX(), zurich.getLayoutY(), check(zurich)));
        stadte.add(new Stadt("Schaffhausen", schaffhausen.getLayoutX(), schaffhausen.getLayoutY(), check(schaffhausen)));
        stadte.add(new Stadt("Aarau", aarau.getLayoutX(), aarau.getLayoutY(), check(aarau)));
        stadte.add(new Stadt("Chur", chur.getLayoutX(), chur.getLayoutY(), check(chur)));
        stadte.add(new Stadt("Glarus", glarus.getLayoutX(), glarus.getLayoutY(), check(glarus)));
        stadte.add(new Stadt("Frauenfeld", frauenfeld.getLayoutX(), frauenfeld.getLayoutY(), check(frauenfeld)));
        stadte.add(new Stadt("Schwyz", schwyz.getLayoutX(), schwyz.getLayoutY(), check(schwyz)));
        stadte.add(new Stadt("Luzern", luzern.getLayoutX(), luzern.getLayoutY(), check(luzern)));
        stadte.add(new Stadt("Sarnen", sarnen.getLayoutX(), sarnen.getLayoutY(), check(sarnen)));
        stadte.add(new Stadt("Bellinzona", bellinzona.getLayoutX(), bellinzona.getLayoutY(), check(bellinzona)));
        stadte.add(new Stadt("Sion", sion.getLayoutX(), sion.getLayoutY(), check(sion)));
        stadte.add(new Stadt("Liestal", liestal.getLayoutX(), liestal.getLayoutY(), check(liestal)));
        stadte.add(new Stadt("Bern", bern.getLayoutX(), bern.getLayoutY(), check(bern)));
        stadte.add(new Stadt("Delemont", delemont.getLayoutX(), delemont.getLayoutY(), check(delemont)));
        stadte.add(new Stadt("Solothurn", solothurn.getLayoutX(), solothurn.getLayoutY(), check(solothurn)));
        stadte.add(new Stadt("Fribourg", fribourg.getLayoutX(), fribourg.getLayoutY(), check(fribourg)));
        stadte.add(new Stadt("Neuchatel", neuchatel.getLayoutX(), neuchatel.getLayoutY(), check(neuchatel)));
        stadte.add(new Stadt("Lausanne", lausanne.getLayoutX(), lausanne.getLayoutY(), check(lausanne)));
        stadte.add(new Stadt("Genf", genf.getLayoutX(), genf.getLayoutY(), check(genf)));
        stadte.add(new Stadt("Altdorf", altdorf.getLayoutX(), altdorf.getLayoutY(), check(altdorf)));
        stadte.add(new Stadt("Stans", stans.getLayoutX(), stans.getLayoutY(), check(stans)));
        stadte.add(new Stadt("Basel", basel.getLayoutX(), basel.getLayoutY(), check(basel)));
        stadte.add(new Stadt("Appenzell", appenzell.getLayoutX(), appenzell.getLayoutY(), check(appenzell)));
        stadte.add(new Stadt("Herisau", herisau.getLayoutX(), herisau.getLayoutY(), check(herisau)));
        stadte.add(new Stadt("St Gallen", stgallen.getLayoutX(), stgallen.getLayoutY(), check(stgallen)));

    }

    public boolean check(RadioButton rb) {
        if (rb.isSelected()) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {

        starter();
    }

}

这是城市类:

package tsprealone;

/**
 *
 * @author kbwschuler
 */
public class Stadt {

    private String name;
    private double xCoord;
    private double yCoord;
    private boolean isClicked;

    public Stadt(String name, double xCoord, double yCoord, boolean isClicked) {
        this.name = name;
        this.xCoord = xCoord;
        this.yCoord = yCoord;
        this.isClicked = isClicked;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getxCoord() {
        return xCoord;
    }

    public void setxCoord(int xCoord) {
        this.xCoord = xCoord;
    }

    public double getyCoord() {
        return yCoord;
    }

    public void setyCoord(int yCoord) {
        this.yCoord = yCoord;
    }

    public boolean isIsClicked() {
        return isClicked;
    }

    public void setIsClicked(boolean isClicked) {
        this.isClicked = isClicked;
    }


}

这是主要课程:

package tsprealone;

import java.awt.Event;
import java.lang.reflect.Field;
import java.util.HashMap;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.FlowPane;
import javafx.scene.shape.Line;
import javafx.stage.Stage;

/**
 *
 * @author kbwschuler
 */
public class TSPRealOne extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        FXMLDocumentController fx = new FXMLDocumentController();
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

        Scene scene = new Scene(root);




        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            launch(args);
            Class<?> macFontFinderClass = Class.forName("com.sun.t2k.MacFontFinder");
            Field psNameToPathMap = macFontFinderClass.getDeclaredField("psNameToPathMap");
            psNameToPathMap.setAccessible(true);
            psNameToPathMap.set(null, new HashMap<String, String>());
        } catch (Exception e) {
        }




    }

}

这是fxml文件:

<?xml version="1.0" encoding="UTF-8"?>
<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane fx:id="anchorPane" prefHeight="773.0" prefWidth="1184.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="tsprealone.FXMLDocumentController">
   <children>
      <ImageView fx:id="img" fitHeight="771.0" fitWidth="1184.0">
         <image>
            <Image url="@schweizerkarte-schweiz.png" />
         </image>
      </ImageView>

      <RadioButton fx:id="zug" layoutX="659.0" layoutY="228.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="zurich" layoutX="659.0" layoutY="166.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="stgallen" layoutX="873.0" layoutY="145.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="schaffhausen" layoutX="682.0" layoutY="51.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="aarau" layoutX="538.0" layoutY="159.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="chur" layoutX="909.0" layoutY="344.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="glarus" layoutX="794.0" layoutY="275.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="frauenfeld" layoutX="746.0" layoutY="94.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="schwyz" layoutX="694.0" layoutY="293.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="luzern" layoutX="599.0" layoutY="275.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="sarnen" layoutX="589.0" layoutY="339.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="bellinzona" layoutX="794.0" layoutY="585.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="sion" layoutX="364.0" layoutY="576.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="liestal" layoutX="462.0" layoutY="121.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="bern" layoutX="382.0" layoutY="315.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="delemont" layoutX="367.0" layoutY="168.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="solothurn" layoutX="408.0" layoutY="225.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="fribourg" layoutX="319.0" layoutY="367.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="neuchatel" layoutX="258.0" layoutY="302.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="lausanne" layoutX="180.0" layoutY="474.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="genf" layoutX="53.0" layoutY="576.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="altdorf" layoutX="690.0" layoutY="332.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="stans" layoutX="622.0" layoutY="306.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="basel" layoutX="423.0" layoutY="94.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="appenzell" layoutX="882.0" layoutY="169.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <RadioButton fx:id="herisau" layoutX="849.0" layoutY="154.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
      <Button fx:id="test" layoutX="1035.0" layoutY="684.0" mnemonicParsing="false" text="Test" onAction="#handleButtonAction" />

   </children>
</AnchorPane>

0 个答案:

没有答案