Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java coords序列的错误线条绘制_Java_Eclipse_Javafx_Fxml_Scenebuilder - Fatal编程技术网

Java coords序列的错误线条绘制

Java coords序列的错误线条绘制,java,eclipse,javafx,fxml,scenebuilder,Java,Eclipse,Javafx,Fxml,Scenebuilder,下面是显示我的问题的gif: 在我的示例中:当我单击单选按钮时,必须按照以下顺序生成线条->sion->sarnen->altdorf->bellinzona,并形成梯形(梯形),但不幸的是,我的代码切换了第二和第三个位置的坐标。我在其他城市也试过,所以可能是fxml出了问题(我不这么认为)。它必须是类FXMLDocumentController中的代码。我在控制台中获得以下输出: Sarnen Line[startX=600.0, startY=347.0, endX

下面是显示我的问题的gif:

在我的示例中:当我单击单选按钮时,必须按照以下顺序生成线条
->sion->sarnen->altdorf->bellinzona
,并形成梯形(梯形),但不幸的是,我的代码切换了第二和第三个位置的坐标。我在其他城市也试过,所以可能是fxml出了问题(我不这么认为)。它必须是类
FXMLDocumentController
中的代码。我在控制台中获得以下输出:

Sarnen            
Line[startX=600.0, startY=347.0, endX=803.0, endY=594.0, stroke=0x000000ff, strokeWidth=1.0]
Line[startX=803.0, startY=594.0, endX=373.0, endY=585.0, stroke=0x000000ff, strokeWidth=1.0]
Line[startX=373.0, startY=585.0, endX=702.0, endY=347.0, stroke=0x000000ff, strokeWidth=1.0]
Line[startX=702.0, startY=347.0, endX=600.0, endY=347.0, stroke=0x000000ff, strokeWidth=1.0]
Bellinzona   
Sion    
Altdorf
这意味着先是萨尔宁,然后是贝林佐纳,然后是锡安,然后是阿尔多夫

FXMLDocumentController
:我个人认为方法
starter()
没有做到这一点,所以它应该先看一下

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.Alert;
//import javafx.scene.control.Alert.AlertType;
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 {
    // private Alert alert = new Alert(AlertType.WARNING); just a message box 
    @FXML
    private AnchorPane anchorPane;
    @FXML
    private ImageView img;

    @FXML
    private ArrayList<Stadt> stadte = new ArrayList<Stadt>();
    @FXML
    private ArrayList<Line> lines = new ArrayList<Line>();
    @FXML
    private Button generiere;
    @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 clearPane(ActionEvent event)
    {
        //anchorPane.getChildren().clear();
        anchorPane.getChildren().removeAll(lines);
        lines.clear();
        anchorPane.getChildren().removeAll(ausgewaehlt);
        ausgewaehlt.clear();

        RadioButton[] allRadioButtons = new RadioButton[] {
                zug, zurich, schaffhausen, stgallen, aarau, chur, glarus, frauenfeld, schwyz, luzern, sarnen, bellinzona, sion, liestal, bern, delemont, solothurn, fribourg, neuchatel, lausanne, genf, altdorf, stans, basel, appenzell, herisau
        };
        for (int i = 0; i < allRadioButtons.length; i++) {
            RadioButton setToUnSelected = allRadioButtons[i];
            for (Stadt stadtToUnSelected : stadte) {
                stadtToUnSelected.setIsClicked(false);
            }
            setToUnSelected.setSelected(false);
        }


    }
    @FXML
    private void handleButtonAction(ActionEvent event) {
        addCities();

        for (Stadt stadt : stadte) {
            if (stadt.isIsClicked()) {
                ausgewaehlt.add(stadt);
                if(ausgewaehlt.size() == 1)
                {

                    /*alert.setTitle("Warnung");
                    alert.setHeaderText("Schau, eine Warnung wurde herausgegeben!");
                    alert.setContentText("Du hast nur eine Stadt ausgewählt. Um das Programm korrekt laufen zu lassen, muss man mehr als eine Stadt auswählen.");

                    alert.showAndWait();
                    System.err.println("Nur eine Stadt ausgewählt");*/
                    //alles kommentiere adel
                }
            }
        }

        starter();
        for (Stadt stadt : ausgewaehlt) {
            System.out.println(stadt.getName());

            for(Line line: lines)
            {

                    try {
                        anchorPane.getChildren().add(line);
                        do {
                            System.out.println(line);
                        }
                        while(ausgewaehlt.size() < lines.size());

                    }catch(IllegalArgumentException e)
                    {


                    }

            }

        }
    }


    public void addCities(){

        stadte.add(new Stadt("Zug", zug.getLayoutX(), zug.getLayoutY(), check(zug)));
        stadte.add(new Stadt("Zurich", 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 void starter() {

        for(int i = 0; i<ausgewaehlt.size(); i++)
        {
                if(i != ausgewaehlt.size() - 1){ 

                    lines.add(new Line(ausgewaehlt.get(i).getxCoord() + 9, ausgewaehlt.get(i).getyCoord() + 9, ausgewaehlt.get(i+1).getxCoord() + 9, ausgewaehlt.get(i+1).getyCoord() + 9));
                }else {
                    lines.add(new Line(ausgewaehlt.get(i).getxCoord() + 9, ausgewaehlt.get(i).getyCoord() + 9, ausgewaehlt.get(0).getxCoord() + 9, ausgewaehlt.get(0).getyCoord() + 9));
                }

        }



    }

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

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

        //addCities();
        //starter();
    }

}
package-tsprealone;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.ResourceBundle;
导入javafx.event.ActionEvent;
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
//导入javafx.scene.control.Alert;
//导入javafx.scene.control.Alert.AlertType;
导入javafx.scene.control.Button;
导入javafx.scene.control.RadioButton;
导入javafx.scene.shape.Line;
导入javafx.scene.image.ImageView;
导入javafx.scene.layout.ancorpane;
/**
*
*@kbwschuler作者
*/
公共类FXMLDocumentController实现可初始化{
//私人警报=新警报(AlertType.WARNING);只是一个消息框
@FXML
私人锚烷锚烷;
@FXML
私有图像视图img;
@FXML
private ArrayList state=new ArrayList();
@FXML
私有ArrayList行=新建ArrayList();
@FXML
专用按钮生成器;
@FXML
私人无线电按钮;
@FXML
苏黎世私人无线按钮;
@FXML
私人无线电按钮沙夫豪森;
@FXML
私人电台按钮;
@FXML
私人电台按钮;
@FXML
私人无线电按钮;
@FXML
私家无线按钮glarus;
@FXML
私人无线按钮弗劳恩菲尔德;
@FXML
私人电台按钮;
@FXML
私人无线电按钮;
@FXML
私人无线按钮;
@FXML
私人无线按钮贝林佐纳;
@FXML
私人无线电发射;
@FXML
私人无线电按钮;
@FXML
伯尔尼私人电台;
@FXML
私人无线电按钮;
@FXML
私人单选按钮solothurn;
@FXML
私人无线电按钮弗里堡;
@FXML
私人无线电按钮纽沙特尔;
@FXML
洛桑私人无线按钮;
@FXML
专用单选按钮genf;
@FXML
专用无线按钮altdorf;
@FXML
私人无线电按钮;
@FXML
巴塞尔私人无线按钮;
@FXML
阿彭策尔私人电台;
@FXML
私人无线按钮herisau;
private ArrayList ausgawehlt=new ArrayList();//检查是否选中
@FXML
私有void clearPane(ActionEvent事件)
{
//anchorPane.getChildren().clear();
anchorPane.getChildren().removeAll(行);
行。清除();
anchorPane.getChildren().removeAll(Ausgawehlt);
ausgawehlt.clear();
RadioButton[]所有RadioButtons=新RadioButton[]{
祖格、苏黎世、沙夫豪森、斯加伦、阿劳、丘尔、格拉斯、弗劳恩菲尔德、施威茨、卢塞恩、萨尔宁、贝林佐纳、锡安、利斯塔尔、伯尔尼、德莱蒙特、索洛图恩、弗里堡、纽沙特尔、洛桑、根夫、奥尔多夫、斯坦斯、巴塞尔、阿彭塞尔、赫里索
};
对于(int i=0;i<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.image.*?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.*?>

<AnchorPane fx:id="anchorPane" prefHeight="773.0" prefWidth="1184.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" 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="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="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="generiere" layoutX="1035.0" layoutY="640.0" mnemonicParsing="false" onAction="#handleButtonAction" text="Generiere Linien" />
     <Button fx:id="clear" layoutX="1035.0" layoutY="690.0" mnemonicParsing="false" onAction="#clearPane" text="Lösche Linien" />
    <RadioButton fx:id="sarnen" layoutX="591.0" layoutY="338.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
    <RadioButton fx:id="altdorf" layoutX="693.0" layoutY="338.0" mnemonicParsing="false" prefHeight="0.0" prefWidth="0.0" style="-fx-color: red;" />
  </children>
</AnchorPane>
for (Stadt stadt : stadte) {
    if (stadt.isIsClicked()) {
        ausgewaehlt.add(stadt);
        if(ausgewaehlt.size() == 1)
        {

            /*alert.setTitle("Warnung");
            alert.setHeaderText("Schau, eine Warnung wurde herausgegeben!");
            alert.setContentText("Du hast nur eine Stadt ausgewählt. Um das Programm korrekt laufen zu lassen, muss man mehr als eine Stadt auswählen.");

            alert.showAndWait();
            System.err.println("Nur eine Stadt ausgewählt");*/
            //alles kommentiere adel
        }
    }
}
private static void createStadt(RadioButton button, String name) {
    button.setUserData(new Stadt(name, button.getLayoutX(), button.getLayoutY()));
}

private final List<Stadt> selectedCities = new ArrayList<>();

public void initialize(URL location, ResourceBundle resources) {
    createStadt(zug, "Zug");
    createStadt(zurich, "Zurich");
    ...

    allRadioButtons = new RadioButton[] {
            zug, zurich, schaffhausen, stgallen, aarau, chur, glarus, frauenfeld, schwyz, luzern, sarnen, bellinzona, sion, liestal, bern, delemont, solothurn, fribourg, neuchatel, lausanne, genf, altdorf, stans, basel, appenzell, herisau
    };
}

@FXML
private void citySelectionAction(ActionEvent event) {
    RadioButton source = (RadioButton) event.getSource();
    Stadt city = (Stadt) source.getUserData();

    if (source.isSelected()) {
        selectedCities.add(city);
    } else {
        selectedCities.remove(city);
    }
}

private RadioButton[] allRadioButtons;

@FXML
private void clearPane(ActionEvent event) {
    anchorPane.getChildren().removeAll(lines);
    lines.clear();
    selectedCities.clear();

    for (RadioButton button : allRadioButtons) {
        button.setSelected(false);
    }
}

@FXML
private void handleButtonAction(ActionEvent event) {
    final int size = selectedCities.size();
    switch (size) {
        case 1:
            /*alert.setTitle("Warnung");
            alert.setHeaderText("Schau, eine Warnung wurde herausgegeben!");
            alert.setContentText("Du hast nur eine Stadt ausgewählt. Um das Programm korrekt laufen zu lassen, muss man mehr als eine Stadt auswählen.");

            alert.showAndWait();
            System.err.println("Nur eine Stadt ausgewählt");*/
        case 0:
        break;
        default:
            Stadt c1 = selectedCities.get(0);
            Stadt c2 = selectedCities.get(size-1);
            lines.add(new Line(c1.getxCoord() + 9, c1.getyCoord() + 9, c2.getxCoord() + 9, c2.getyCoord() + 9));
            // intentional fallthrough
        case 2:
            Stadt currentCity = selectedCities.get(0);
            for(int i = 1; i < size; i++) {
                 Stadt nextCity = selectedCities.get(i);
                 lines.add(new Line(currentCity.getxCoord() + 9, currentCity.getyCoord() + 9, nextCity.getxCoord() + 9, nextCity.getyCoord() + 9));
                 currentCity  = nextCity;
            }

    }

    selectedCities.clear();

    // start adding lines starting at the end until a line is found that is
    // already added to the anchorPane
    Line line;
    for (int i = lines.size()-1; (i >= 0) && ((line = lines.get(i)).getParent() == null); i--) {
        anchorPane.getChildren().add(line);
    }

}
for (Stadt stadt : stadte) {
        if (stadt.isIsClicked()) {
            ausgewaehlt.add(stadt); 
}