第三個java程式(表白小卡片)

threecat.up發表於2020-02-10

前言:

 向女神表白啦,作為一個程式設計師,當然也有愛情啦只不過,雖然前面兩個程式都只是學習了基礎的語法結構和向量雜湊表。這裡涉及的是Swing,awt圖形使用者介面和一點檔案輸入輸出流的知識。
  表白程式碼如下:

另附:裡面的音樂和圖片可以放在一個自己建立的包裡面,也可以放在src裡面,或者使用絕對路徑。至於佈局,我自己的使用的是簡單的排版,簡單的繼承。後面的程式會慢慢實現。
老規矩:建立專案,包,類。

import java.awt.*;//匯入java.awt包中的類
import java.io.*;//匯入java.io輸入輸出流類
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.util.Date;

import javax.sound.sampled.*;//匯入javax.sound.sampled包中的音訊類
import java.awt.event.*;//匯入java.awt.event包中定義的事件類
import javax.swing.*;//匯入java.swing包中的類
import java.io.*;
import javax.sound.sampled.*;
public class three{//主類
	public static void main(String[] args) {//主方法
		MainWnd w = new MainWnd();//建立並顯示主視窗物件
		w.repaint();//呼叫視窗的重繪方法
		try {//播放過程中可能會丟擲勾選異常
			//為音訊檔案建立起音訊輸入流
			File f = new File("src/東京.wav");//音訊檔案
			AudioInputStream ais = AudioSystem.getAudioInputStream(f);
			//System.out.println(ais.getFormat());//獲取音訊格式
			Clip c = AudioSystem.getClip();//獲取播放音訊的片段物件
			c.open(ais);//在片段物件中開啟音訊輸入流ais
			c.setFramePosition(0);//設定播放起始位置
			//System.out.println("Start");
			c.start();//開始播放音訊
			Thread.sleep(100000);//休眠等待100秒,否則音訊播放完程式就結束了
			c.close();//關閉片段物件
			//System.out.println("Close");
		}
		catch(Exception e) {System.out.println(e.getMessage());}
	}
}

class MainWnd extends JFrame{//定義主視窗類:繼承並擴充套件視窗類JFrame
	public MainWnd() {//構造方法完成初始視窗化的功能
		String []s = {null,"me","you"};
		ImageIcon[]ic= {null,new ImageIcon("src\\img1.gif"),
				new ImageIcon("src\\img2.gif")};
	int []ih = {0,JLabel.LEFT,JLabel.CENTER};
	int []iv = {0,JLabel.CENTER,JLabel.BOTTOM};
	Container c = getContentPane();
	c.setLayout(new FlowLayout(FlowLayout.RIGHT));
	for(int i=0;i<3;i++)
	{
		JLabel aLabel = new JLabel(s[i],ic[i],JLabel.LEFT);
		if(i>0)
		{
			aLabel.setHorizontalTextPosition(ih[i]);
			aLabel.setVerticalTextPosition(iv[i]);
		}
		c.add(aLabel);
	}
		setSize(460,300);//設定視窗尺寸
		setLocation(100,100);//設定視窗位置
		setVisible(true);//設定視窗時顯示或隱示
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關閉視窗時退出程式
	}
	
	public void paint(Graphics g) {//重寫繪圖方法paint()
		super.paint(g);//呼叫超類的paint()方法
		Font ef = new Font("TimesRoman",Font.PLAIN,24);//建立字型物件
		g.setFont(ef);//設定字型
		g.setColor(Color.PINK);//設定繪圖顏色
		g.drawString("I Love you", 20, 80);//顯示英文資訊
		Font cf = new Font("楷體",Font.PLAIN,24);//選擇字型
		g.setFont(cf);//設定字型
		g.drawString("為你寫一首歌", 20, 120);//顯示中文資訊
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	    LocalDate today = LocalDate.now();
	    LocalDate oldDate = LocalDate.of(2015, 12,23); 
	    Period p = Period.between(oldDate, today);
	    String n1 =Integer.toString(p.getYears()) ;
	    String n2 = Integer.toString(p.getMonths());
	    String n3 = Integer.toString(p.getDays());
	    Font kf = new Font("TimesRoman",Font.PLAIN,22);//建立字型物件
		g.setFont(kf);//設定字型
		g.setColor(Color.PINK);//設定繪圖顏色
		g.drawString("                    -I&Y一起"+n1+"年"+n2+"月"+n3+"天", 20, 80);
		g.setColor(Color.PINK);//設定填充顏色
		g.fillRect(20, 150, 100,100);//畫一個實心矩陣
		g.setColor(Color.RED);//設定繪圖顏色
		g.drawRect(20, 150, 100,100);//畫一個矩形框,此處是為上面的實心矩形加框
		
	}
}

開啟時顯示此畫面,後臺播放音樂。圖片和音樂都可以切換,這裡的矩陣用draw方法繪畫的,都可以更改,時間是當前時間與一個特定時間的差值,也可以改變。

後記:

開啟時顯示此畫面,後臺播放音樂。圖片和音樂都可以切換,這裡的矩陣用draw方法繪畫的,都可以更改,時間是當前時間與一個特定時間的差值,也可以改變。
  衝鴨,第四個實驗要來了哦。這個有不理解的或者有大神有更好的結構的私戳我哦,謝謝。

相關文章