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程序輸出如下圖的這種簡單心形,誰能給我講講思路。加上程序示例更好
用方程的話肯定輸出不會和你的圖完全一致
心形線方程如圖