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. grvphviz && dot脚本语言

    安装graphviz 可去官网下载http://www.graphviz.org/download/下载之后按步骤安装 打开编辑器,创建*.dot文件,编辑dot脚本代码,保存. D:\>dot ...

  2. [BJWC2012]冻结 分层图最短路

    昨晚飞行路线之后,这道题就应该能一眼切了 题目当然也不难,跑一遍分层图最短路即可 Code: #include<cstring> #include<algorithm> #in ...

  3. Shell应用之网卡流量监测

    需求分析 1)按固定时间监测一次网卡流量 2)当网卡流量为0时重启网卡 一.网卡流量查询 sar(System ActivityReporter系统活动情况报告)是目前Linux上最为全面的系统性能分 ...

  4. python -迭代器与生成器 以及 iterable(可迭代对象)、yield语句

    我刚开始学习编程没多久,对于很多知识还完全不知道,而有些知道的也是一知半解,我想把学习到的知识记录下来,一是弥补记忆力差的毛病,二也是为了待以后知识能进一步理解透彻时再回来做一个补充. 参考链接: 完 ...

  5. cmder-替代cmd

    之所以选择cmder,说来话长,在学习python的过程中,由于经常通过pip命令安装包,并且在学习一些包的使用例如virtualenv,教程贴都是在终端下的命令,这使我对cmd的使用频率慢慢变多了起 ...

  6. Unity C# 设计模式(二)简单工厂模式

    定义: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 ...

  7. SPOJ 694 Distinct Substrings

    Distinct Substrings Time Limit: 1000ms Memory Limit: 262144KB This problem will be judged on SPOJ. O ...

  8. Codeforces Round #313 (Div. 2) 解题报告

    A. Currency System in Geraldion: 题意:有n中不同面额的纸币,问用这些纸币所不能加和到的值的最小值. 思路:显然假设这些纸币的最小钱为1的话,它就能够组成随意面额. 假 ...

  9. java枚举在android项目应用

    今天修复一个公司非常早曾经的android应用功能,里面的代码逻辑已经全然错乱,然后发现返回的数据全然不正确了.然后修复了整整两天.然后我又一次整理了一遍,重构就算不上了. 然后就用上了枚举. 什么是 ...

  10. STL 之 hash_map源代码剖析

    // Filename: stl_hash_map.h // hash_map和hash_multimap是对hashtable的简单包装, 非常easy理解 /* * Copyright (c) 1 ...