1. java如何让多个图片都按照一定轨迹下落
图片的位移(下落),可以通过修改图片的x,y坐标来实现, 在Swing/Html中,我们可以使用Timer定时(比如每隔100毫秒)去修改图片的x,y坐标即可实现,
多个图片都按照一定的轨迹移动,那都按照自己的轨迹的算法,去定时修改x,y坐标即可.
JavaFX是java先进的图形界面框架, 里面有3D和各种动画, 所以按照轨迹移动,都能轻松实现
importjavafx.animation.Animation;
importjavafx.animation.Interpolator;
importjavafx.animation.PathTransition;
importjavafx.animation.RotateTransition;
importjavafx.application.Application;
importjavafx.geometry.Insets;
importjavafx.scene.Group;
importjavafx.scene.Scene;
importjavafx.scene.control.Button;
importjavafx.scene.image.ImageView;
importjavafx.scene.layout.HBox;
importjavafx.scene.shape.MoveTo;
importjavafx.scene.shape.Path;
importjavafx.scene.shape.QuadCurveTo;
importjavafx.stage.Stage;
importjavafx.util.Duration;
{
publicstaticvoidmain(String[]args){
launch(args);
}
@Override
publicvoidstart(StageprimaryStage)throwsException{
ImageViewimv=newImageView(getClass().getResource("ball.png").toExternalForm());
Pathpath=newPath();//路径;运动轨迹
MoveTomt=newMoveTo(20,50);
QuadCurveToquadTo2=newQuadCurveTo(175,190,350,30);
path.getElements().addAll(mt,quadTo2);
HBoxhbox=newHBox(10);
ButtonbtnStart=newButton("开始");
ButtonbtnPause=newButton("暂停");
ButtonbtnResume=newButton("继续");
ButtonbtnStop=newButton("结束");
hbox.getChildren().addAll(btnStart,btnPause,btnResume,btnStop);
hbox.setPadding(newInsets(20));
hbox.setLayoutX(80);
hbox.setLayoutY(230);
Grouproot=newGroup();
root.getChildren().addAll(imv,path,hbox);//不添加path.就可以不显示path了
Scenescene=newScene(root,430,300);
primaryStage.setTitle("JavaFX");
primaryStage.setScene(scene);
primaryStage.show();
//旋转动画设置
RotateTransitionrt=newRotateTransition(Duration.millis(1000),imv);
rt.setInterpolator(Interpolator.LINEAR);
rt.setFromAngle(0);
rt.setToAngle(360);
rt.setCycleCount(Animation.INDEFINITE);
rt.play();
//路径动画设置
PathTransitionpt=newPathTransition(Duration.millis(800),path,imv);//路径动画
pt.setCycleCount(Animation.INDEFINITE);
pt.setAutoReverse(true);
btnStart.setOnAction(e->{
pt.playFromStart();//从头开始播放
});
//----按钮的响应设置---
btnPause.setOnAction(e->{
pt.pause();
});
btnResume.setOnAction(e->{
pt.play();//播放
});
btnStop.setOnAction(e->{
pt.jumpTo(newDuration(0));//跳到第0秒处
pt.stop();
});
}
}
2. javafx mediaview 有声音没图像
主要问题: 和你上一个问题 "javafx图片显示不出来" 其实是同一类型的错误.
因为你通过代码FXMLLoader.load(...fxml)加载了界面,已经实例化了组件,
就不需要你手动去new XxxView出来了. 你可以在new MediaView之前,试试下面这行代码
System.out.println(mv==null);//结果是false,代表mv已经实例化了
如果你去new了 , 那么mv就是新的MediaView,. 而并不是程序界面上的MediaView.
所以没有画面. 但是有声音, 并且声音没有通过鼠标点击,就自动出来了. 因为你把代码写到了初始化方法里initialize .
解决办剪切 initialize 方法里的代码. 然后粘贴到新的jj方法里
@Override
publicvoidinitialize(URLlocation,ResourceBundleresources){//初始化,在这个程序里不需要写代码
}
publicvoidjj(){//onMouseClicked="#jj"mv点击鼠标后,绑定的方法是jj,所以在这里进行播放工作
Stringmv_URL=getClass().getResource("你的视频.mp4").toString();
System.out.println(mv_URL);
Mediah=newMedia(mv_URL);
MediaPlayermp=newMediaPlayer(h);
//mv=newMediaView();//删除此行代码
mv.setMediaPlayer(mp);
mp.play();
}
效果图
3. java编程JavaFX
JavaFX脚本是一种声明式、静态类型编程语言。它具有一等函数(first-class functions)、声明式的语法、列表推导回(list-comprehensions)及基于依赖关系答的增量式求值(incremental dependency-based evaluation)等特征。
JavaFX脚本为多种多样的操作提供了声明式、无中间程序逻辑的语法,这些操作包括创建2D动画、设置属性或者声明在模式和视图对象之间的绑定依赖关系。
4. 如何用javaFX画正弦曲线
写一个类继承JFrame
private final int WIDTH = 900, HEIGHT = 450;//窗口默认的宽度、高度
private final int offsetX=15;//原点的距离窗口左边空白
private final int offsetY=5; //原点的距离窗口顶边空白
private final int stepX=200; //横向步进
private final int stepY=200; //纵向步进
private final Color colBack = Color.white; //背景颜色
private final Color colText = Color.blue; //文字标签颜色
private final Color colCros = Color.DARK_GRAY; //轴颜色
private final Color colLine = Color.red; //线颜色
private JRadioButton rdSin=new JRadioButton("Sin");
private JRadioButton rdCos=new JRadioButton("Cos");
private JButton btnDraws = new JButton("画线");
private JButton btnClear = new JButton("清空");
private boolean bDraw = false;
public void paint(Graphics g){
super.paint(g); //让父类先处理
int w=getWidth(); //窗口的宽度
int h=getHeight();//窗口的高度
g.setColor(colBack); //底色用白色
g.fillRect(0, 0, w, h); //填充整个窗口
rdSin.repaint();
rdCos.repaint();
btnDraws.repaint();
btnClear.repaint();
if(!bDraw){
return ;
}
int mid_y=(h-offsetY)/2+10;//半高
g.setFont(g.getFont().deriveFont(10f));//字体大小
g.setColor(colCros); //横线和竖线,用深灰色
g.drawLine(0, offsetY+mid_y, w, mid_y+offsetY); //横线中线
g.drawLine(offsetX, offsetY, offsetX, h); //竖线中线
g.setColor(colText); //刻度用蓝色
int maxX=(int)Math.round( (w-offsetX) / stepX);//计算一下横向最大刻度
for(int i=0;i<=maxX;i++){
g.drawLine(offsetX+stepX*i, offsetY+mid_y-5, offsetX+stepX*i, offsetY+mid_y+5);//横线刻度,90步进,方便后面画线的计算
g.drawString(String.valueOf(90*i), offsetX+stepX*i-5, offsetY+mid_y+10+5); //刻度是90度
}
int maxY=(int)Math.round( mid_y / stepY);//计算一下纵向最大刻度
for(int i=1;i<=maxY;i++){
g.drawLine(offsetX-5, offsetY+mid_y-stepY*i, offsetX+5, offsetY+mid_y-stepY*i);//竖线正刻度,100步进
g.drawString(String.valueOf(stepY*i), offsetX+10, offsetY+mid_y-stepY*i+5);
g.drawLine(offsetX-5, offsetY+mid_y+stepY*i, offsetX+5, offsetY+mid_y+stepY*i);//竖线负刻度,100步进
g.drawString(String.valueOf(-stepY*i), offsetX+10, offsetY+mid_y+stepY*i+5);
}
g.setColor(colLine); //曲线用红色
int x1, y1, x_=-1,y_=0;
for(int i=0; i<=w; i++){ //从0度到窗口宽度,开始画Sin()点
x1=((Double)(offsetX+i/90.0*stepX) ).intValue();
if(rdSin.isSelected()){
y1=offsetY+((Double)( mid_y+stepY*Math.sin( Math.toRadians(i) )) ).intValue();
}else{
y1=offsetY+((Double)( mid_y+stepY*Math.cos( Math.toRadians(i) )) ).intValue();
}
if(x_==-1){
x_=x1;y_=y1;
}
g.drawLine(x_, y_, x1, y1);
x_=x1;y_=y1;
}
}
public SinCos(){
super("测试Graphics+Sin/Cos");
this.setSize(WIDTH, HEIGHT);
this.setLayout(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ButtonGroup group = new ButtonGroup();
group.add(rdSin);
group.add(rdCos);
this.getContentPane().add(rdSin);
this.getContentPane().add(rdCos);
this.getContentPane().add(btnDraws);
this.getContentPane().add(btnClear);
this.setVisible(true);
this.doLayout();
btnDraws.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
bDraw=true; SinCos.this.repaint();
}
});
btnClear.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
bDraw=false;SinCos.this.repaint();
}
});
rdSin.setSelected(true);
}
public void doLayout(){
super.doLayout();
rdSin.setBounds(10, 15, 50, 20);
rdCos.setBounds(rdSin.getX()+rdSin.getWidth()+5, 15, 50, 20);
btnDraws.setBounds(rdCos.getX()+rdCos.getWidth()+5, 12, 70, 25);
btnClear.setBounds(btnDraws.getX()+btnDraws.getWidth()+3, 12, 70, 25);
}
public static void main(String[] args){
EventQueue.invokeLater(new Runnable() {
public void run() {
new SinCos();
}
});
}
画正弦余弦的方法
5. 如何将JavaFX程序打包成exe
一、使用javafxpackager
javafxpackager是javafx提供的打包工具,好像从jdk1.7开始就包含这个工具了,它在 jdk 的 bin 目录下。
第一步:新建两个文件夹
一个放入你想打包的jar,另一个用来存放打包生成的exe,注意所有目录、jar、exe名字都不要带空格。
第二步:开始打包
在 jdk 的 bin 目录下运行cmd,输入javafxpackager,可以看到可用的参数,如下图
我们使用deploy命令,大部分参数一般都是用不到的
我们可以使用下面的参数简单打包
javafxpackager -deploy -native image -appclass test.Test -srcdir E://test1 -outdir E://test2 -outfile test -name testName
要按实际情况修改的,-appclass是包含main函数的类,要写出包名。
成功以后出现这样的提示
在test2目录下会出现这些文件,bundles文件夹里就是已经打包好的exe文件了
6. 最新版IntelliJ IDEA旗舰版 + JDK10最新版,创建javafx项目后很多javafx的包不能导入。
(1)准备工作
1) 安装JDK 6或者JDK 7
2) 安装scala 2.10.x (注意版本)
2)下载Intellij IDEA最新版(本文以IntelliJ IDEA Community Edition 13.1.1为例说明,不同版本,界面布局可能不同)
3)将下载的Intellij IDEA解压后,安装scala插件,流程如下:
依次选择“Configure”–> “Plugins”–> “Browse repositories”,输入scala,然后安装即可
(2)搭建Spark源码阅读环境(需要联网)
一种方法是直接依次选择“import project”–> 选择spark所在目录 –>
“SBT”,之后intellij会自动识别SBT文件,并下载依赖的外部jar包,整个流程用时非常长,取决于机器的网络环境(不建议在windows
下操作,可能遇到各种问题),一般需花费几十分钟到几个小时。注意,下载过程会用到git,因此应该事先安装了git。
第二种方法是首先在linux操作系统上生成intellij项目文件,然后在intellij IDEA中直接通过“Open
Project”打开项目即可。在linux上生成intellij项目文件的方法(需要安装git,不需要安装scala,sbt会自动下载)是:在
spark源代码根目录下,输入sbt/sbt gen-idea
注:如果你在windows下阅读源代码,建议先在linux下生成项目文件,然后导入到windows中的intellij IDEA中。
(3)搭建Spark开发环境
在intellij IDEA中创建scala project,并依次选择“File”–> “project structure”
–> “Libraries”,选择“+”,将spark-hadoop
对应的包导入,比如导入spark-assembly_2.10-0.9.0-incubating-hadoop2.2.0.jar(只需导入该jar
包,其他不需要),如果IDE没有识别scala 库,则需要以同样方式将scala库导入。之后开发scala程序即可:
编写完scala程序后,可以直接在intellij中,以local模式运行,方法如下:
点击“Run”–> “Run Configurations”,在弹出的框中对应栏中填写“local”,表示将该参数传递给main函数,如下图所示,之后点击“Run”–> “Run”运行程序即可。
如果想把程序打成jar包,通过命令行的形式运行在spark 集群中,可以按照以下步骤操作:
依次选择“File”–> “Project Structure” –> “Artifact”,选择“+”–>
“Jar” –> “From Moles with
dependencies”,选择main函数,并在弹出框中选择输出jar位置,并选择“OK”。
最后依次选择“Build”–> “Build Artifact”编译生成jar包。
7. 用java或者c程序输出如下图的这种简单心形,谁能给我讲讲思路。加上程序示例更好
用方程的话肯定输出不会和你的图完全一致
心形线方程如图