Netbean  java8    source code  :http://files.cnblogs.com/files/rojas/HNT.zip

screenshot:

1  model

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package hnt.model; /**
*
* @author yang
*/
public class Pan { private String ptag;
private double psize; public Pan(String ptag, double psize) {
this.ptag = ptag;
this.psize = psize;
} /**
* @return the ptag
*/
public String getPtag() {
return ptag;
} /**
* @param ptag the ptag to set
*/
public void setPtag(String ptag) {
this.ptag = ptag;
} /**
* @return the psize
*/
public double getPsize() {
return psize;
} /**
* @param psize the psize to set
*/
public void setPsize(double psize) {
this.psize = psize;
} }

2 common logic

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package hnt.control; import hnt.model.Pan;
import java.util.Stack; /**
*
* @author yang
*/
public class Logic { public void setNewPole(Stack<Pan> pole, int capcity) {
int i = capcity - ;
while (i >= ) {
pole.push(new Pan("p" + i, i * + ));
i--;
}
} public int MovePan(Stack<Pan> soruce, Stack<Pan> target) { if (soruce.size() == ) {
return ;
} if (target.size() == ) {
target.push(soruce.pop());
return ;
} else {
Pan pans = soruce.peek();
Pan pant = target.peek();
if (CheckSize(pans, pant)) {
target.push(soruce.pop());
return ;
}
return ;
} } private boolean CheckSize(Pan pans, Pan pant) {
boolean canMove = false; if (pans.getPsize() < pant.getPsize()) {
canMove = true;
}
return canMove;
} }

3 call point

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package hnt; import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage; /**
*
* @author yang
*/
public class HNT extends Application { @Override
public void start(Stage primaryStage) throws IOException { FXMLLoader loader=new FXMLLoader();
loader.setLocation(HNT.class.getResource("/hnt/showHNT.fxml"));
BorderPane bp= loader.load(); ShowHNTController shnt= loader.getController();
//shnt.doinitialize(); StackPane root = new StackPane();
root.getChildren().add(bp); Scene scene = new Scene(root, , ); primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
} /**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
} }

4 control

 /*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package hnt; import hnt.control.Logic;
import hnt.model.Pan;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Stack;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent; import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField; /**
* FXML Controller class
*
* @author yang
*/
public class ShowHNTController implements Initializable { Logic l = new Logic();
Stack<Pan> source = new Stack<>();
Stack<Pan> target = new Stack<>(); private int capcity = ; @FXML
TextField tfcapcity = new TextField("" + getCapcity()); @FXML
public void handleTextChange(final ActionEvent event) { TextField tmptf = (TextField) event.getSource();
//System.out.println("----------------- "+tmptf.getText());
setCapcity(Integer.parseInt(tmptf.getText()));
refreshListView();
} public void refreshListView() { Stack<Pan> pole = new Stack();
l.setNewPole(pole, getCapcity()); obsA = translate2SomeSymbol(pole);
poleA.setItems(obsA); selecteditem.add("A");
obsB.clear();
obsC.clear();
mapAear.put("obsA", obsA);
mapAear.put("obsB", obsB);
mapAear.put("obsC", obsC); poleA.setItems(mapAear.get("obsA"));
poleB.setItems(mapAear.get("obsB"));
poleC.setItems(mapAear.get("obsC")); //clear status
selecteditem = new ArrayList<>();
source.removeAllElements();
target.removeAllElements(); System.out.println(" come to refreshListView()");
} List<String> selecteditem = new ArrayList<>(); int countMoveTimes = ;
@FXML
Label MoveTimes = new Label("MoveTimes :" + countMoveTimes); @FXML
Button A; @FXML
Button B; @FXML
Button C; static ObservableList<Button> obsA = FXCollections.observableArrayList(); @FXML
ListView<Button> poleA = new ListView<>(obsA); static ObservableList<Button> obsB = FXCollections.observableArrayList(); @FXML
ListView<Button> poleB = new ListView<>(obsB); static ObservableList<Button> obsC = FXCollections.observableArrayList(); @FXML
ListView<Button> poleC = new ListView<>(obsC); // String Aear[]={"obsA","obsB","obsC"};
static Map<String, ObservableList> mapAear = new HashMap<>(); /**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) { // String Aear[]={"obsA","obsB","obsC"};
//MoveTimes = new Label("MoveTimes");
Stack<Pan> pole = new Stack();
l.setNewPole(pole, getCapcity()); obsA = translate2SomeSymbol(pole);
poleA.setItems(obsA); selecteditem.add("A"); mapAear.put("obsA", obsA);
mapAear.put("obsB", obsB);
mapAear.put("obsC", obsC);
System.out.println(" come to ShowHNTController");
} //to button
private ObservableList translate2SomeSymbol(Stack<Pan> pole) {
ObservableList<Button> obs = FXCollections.observableArrayList();
int pdelay=pole.size();
for (Pan pole1 : pole) {
Button bt = new Button();
bt.setText(pole1.getPtag());
bt.setRotate();
bt.setMaxWidth(pole1.getPsize());
bt.setTranslateX();
obs.add(bt);
} return obs;
} // to SomeSymbol
private Stack<Pan> retranslate2SomeSymbol(ObservableList<Button> bts) {
// ObservableList<Button> obs=FXCollections.observableArrayList();
Stack<Pan> pole = new Stack<>();
for (Button bt : bts) {
Pan p = new Pan(bt.getText(), bt.getWidth());
pole.add(p);
}
return pole;
} String buttoncolor = "-fx-base: #b6e7c9;"; public void ChangeColor(String which, String colorstr) {
// String buttoncolor="-fx-base: #b6e7c9;";
for (String key : mapAear.keySet()) {
if (key.contains(which) && (mapAear.get(key).size() > )) {
Button bt = (Button) mapAear.get(key).get(mapAear.get(key).size() - );
bt.setStyle(colorstr);
}
} } @FXML
public void handleClick(final ActionEvent event) { Button bt = (Button) event.getSource();
//System.out.println(" from which "+bt.getText()+" width "+bt.getWidth()); if (selecteditem.isEmpty()) {
selecteditem.add(bt.getText());
ChangeColor(bt.getText(), buttoncolor);
return;
} else {
if (selecteditem.size() >= ) {
selecteditem.remove();
selecteditem.add(bt.getText());
ChangeColor(bt.getText(), buttoncolor);
} else {
selecteditem.add(bt.getText());
ChangeColor(bt.getText(), buttoncolor);
}
} // move action
if ((selecteditem.size() > ) && (!selecteditem.get().equals("")) && (!selecteditem.get().equals(selecteditem.get()))) { // System.out.println(" selected name " +obsA.getClass().getName());
for (String key : mapAear.keySet()) {
if (key.contains(selecteditem.get())) {
source = retranslate2SomeSymbol(mapAear.get(key));
}
if (key.contains(selecteditem.get())) {
target = retranslate2SomeSymbol(mapAear.get(key));
}
} ////===============
l.MovePan(source, target); for (String key : mapAear.keySet()) {
if (key.contains(selecteditem.get())) {
mapAear.replace(key, translate2SomeSymbol(source));
}
if (key.contains(selecteditem.get())) {
mapAear.replace(key, translate2SomeSymbol(target));
}
}
ChangeColor(bt.getText(), "");
poleA.setItems(mapAear.get("obsA"));
poleB.setItems(mapAear.get("obsB"));
poleC.setItems(mapAear.get("obsC")); //MoveTimes =new Label("MoveTimes");
countMoveTimes += ;
MoveTimes.setText("MoveTimes:" + countMoveTimes); //clear status
selecteditem = new ArrayList<>();
source.removeAllElements();
target.removeAllElements();
} } /**
* @return the capcity
*/
public int getCapcity() {
return capcity;
} /**
* @param capcity the capcity to set
*/
public void setCapcity(int capcity) {
this.capcity = capcity;
} }

5 FXML

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.*?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?> <BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="hnt.ShowHNTController">
<bottom>
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="100.0" BorderPane.alignment="CENTER">
<children>
<Button fx:id="A" minHeight="20.0" minWidth="20.0" mnemonicParsing="false" onAction="#handleClick" prefHeight="23.0" prefWidth="100.0" text="A" />
<Button fx:id="B" mnemonicParsing="false" onAction="#handleClick" prefHeight="23.0" prefWidth="100.0" text="B" />
<Button fx:id="C" mnemonicParsing="false" onAction="#handleClick" prefHeight="23.0" prefWidth="100.0" text="C" />
</children>
</HBox>
</bottom>
<center>
<HBox prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<children>
<ListView fx:id="poleA" prefHeight="200.0" prefWidth="200.0" rotate="180.0" />
<ListView fx:id="poleB" prefHeight="200.0" prefWidth="200.0" rotate="180.0" />
<ListView fx:id="poleC" prefHeight="200.0" prefWidth="200.0" rotate="180.0" />
</children>
</HBox>
</center>
<top>
<VBox prefHeight="52.0" prefWidth="600.0" BorderPane.alignment="CENTER">
<children>
<Label alignment="CENTER" prefHeight="15.0" prefWidth="600.0" text="HNT" textAlignment="CENTER">
<font>
<Font size="27.0" />
</font>
</Label>
<HBox prefHeight="100.0" prefWidth="200.0" spacing="10.0">
<children>
<Label fx:id="MoveTimes" prefHeight="15.0" prefWidth="365.0" text="Move Times">
<padding>
<Insets left="20.0" />
</padding>
</Label>
<Label prefHeight="15.0" prefWidth="42.0" text="Capcity:" />
<TextField fx:id="tfcapcity" onAction="#handleTextChange" text="">
<HBox.margin>
<Insets />
</HBox.margin>
<padding>
<Insets bottom="10.0" />
</padding>
</TextField>
</children>
</HBox>
</children>
</VBox>
</top>
</BorderPane>

javafx Hanoi的更多相关文章

  1. Hanoi问题java解法

    用什么语言解法都差不多,思路都是一样,递归,这其中只要注重于开始和结果的状态就可以了,对于中间过程,并不需要深究.(我细细思考了一下,还是算了.=_=) 代码其实很简单注重的是思路. 问题描述:有一个 ...

  2. 问题记录:JavaFx 鼠标滑轮滚动事件监听!

    问题描述: 在listview的item里面添加鼠标拖拽排序功能.代码如下: setOnMouseDragged(event -> { //设定鼠标长按0.3秒后才可拖拽 防止误操作 isCan ...

  3. JavaFx客户端服务器C/S架构搭建

    客户端获取服务器端软件更新版本方法: package com.platform.ui.update; import java.io.BufferedInputStream; import java.i ...

  4. JavaFX 教程资料收集

    1. JavaFX中文资料 http://www.javafxchina.net/blog/docs/tutorial1/ 2. JavaFX入门教程 http://www.xrpmoon.com/c ...

  5. HDU1329 Hanoi Tower Troubles Again!——S.B.S.

    Hanoi Tower Troubles Again! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  6. ZOJ-1239 Hanoi Tower Troubles Again!

    链接:ZOJ1239 Hanoi Tower Troubles Again! Description People stopped moving discs from peg to peg after ...

  7. 在 linux 上部署并运行 JavaFX 项目

    环境 redhat 6.4.eclipse安装JavaFX插件 项目详情及代码参见 在linux上配置并创建JavaFX项目 ,该部署即此文章中项目的部署 配置build.fxbuild 生成buil ...

  8. 在linux上配置并创建JavaFX项目

    本环境为linux配置,因为这里的JavaFX项目是为定制Oracle监控工具而写的.现Oracle已收购Java好几年,用它自己的产生监控自己的东西还是很兼容的.此处Eclipse 为4.5版本. ...

  9. javafx之登陆界面的跳转

    界面布局用到的是fxml而非纯java代码,工具是javafx sence builder 账号:account 密码:password 登陆成功: 可以点击退出登陆返回到登陆页面 工程目录: pac ...

随机推荐

  1. jqueryEasyui重新渲染

    转载: jQuery EasyUI parser 的使用场景 | WebUI框架使用参考+http://www.easyui.info/archives/216.html parser,故名意思,就是 ...

  2. PostgreSQL Replication之第七章 理解Linux高可用(6)

    7.6 PostgreSQL和高可用性 数据库是我们日常数字生活的一部分,并期望它们快速工作. 您浏览网上论坛吗?那个帖子在数据库中.您看医生吗?您的医疗记录在数据库中.您在网上购物吗?那个货物,您的 ...

  3. Busy waiting

    In computer systems organization or operating systems, "busy waiting" refers to a process ...

  4. 将double数据保留两位小数

    private double formatDouble(double number) { DecimalFormat df = new DecimalFormat("#.00"); ...

  5. Java 调用对象方法的执行过程

    弄清调用对象方法的执行过程十分重要.下面是调用过程的详细描述: 1) 编译器查看对象的声明类型和方法名.假设调用x.f(param),且隐式参数x声明为C类的对象.需要注意的是:有可能存在多个名为f, ...

  6. rsync---远程数据同步工具

    rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而 ...

  7. 洛谷P2196 && caioj 1415 动态规划6:挖地雷

    没看出来动规怎么做,看到n <= 20,直接一波暴搜,过了. #include<cstdio> #include<cstring> #include<algorit ...

  8. PKU 2288 Islands and Bridges 状态dp

    题意: 给你一张地图,上面有一些岛和桥.你要求出最大的三角哈密顿路径,以及他们的数量. 哈密顿路:一条经过所有岛的路径,每个岛只经过一次. 最大三角哈密顿路:满足价值最大的哈密顿路. 价值计算分为以下 ...

  9. 第三讲 $\mathbb{R}^4$上平凡主丛的联络、曲率与Yang-Mills泛函

    一. $\mathbb{R}^4$或$\mathbb{R}^n$上平凡主丛的联络与曲率$\newcommand{\R}{\mathbb{R}}$ 回忆切丛$T\R^n\cong \R^n\times\ ...

  10. HDFS 断点续传,写文件功能

    实际上这是个 HDFS 的工具类部分代码. 首先 public static Configuration configuration = null;public static FileSystem f ...