拼习阶段。很多不足,改进了一下
演示ภาพ:
J_Puzzle.java
นำเข้า java.awt.BorderLayout;นำเข้า java.awt.Component;นำเข้า java.awt.Container;นำเข้า java.awt.Dimension;นำเข้า java.awt.Font;นำเข้า java.awt.Graphics;นำเข้า java.awt.GridBagConstraints;นำเข้า java.awt.GridBagLayout;นำเข้า java.awt.Image;นำเข้า java.awt.Point;นำเข้า java.awt.event.ActionEvent;นำเข้า java.awt.event.ActionListener;นำเข้า java.awt.Toolkit;นำเข้า java.io.File;นำเข้า java.io IOException; นำเข้า java.util.Random; นำเข้า javax.imageio.ImageIO; นำเข้า javax.swing.ImageIcon; นำเข้า javax.swing.JButton; นำเข้า javax.swing.JFrame; นำเข้า javax.swing.JMenu; นำเข้า javax.swing.JMenuBar; นำเข้า javax.swing.JMenuItem; นำเข้า javax.swing.JOptionPane;นำเข้า javax.swing.JPanel;นำเข้า javax.swing.KeyStroke;คลาส J_JPanel ขยาย JPanel{ /** * */ ส่วนตัวคงที่สุดท้ายแบบยาว serialVersionUID = 1L; รูปภาพ m_image; int showpicture=0; @SuppressWarnings("static-access") public J_JPanel() พ่น IOException { J_Puzzle a = new J_Puzzle(); ถ้า (a.changetime==-1) แสดงรูปภาพ = 1; ไฟล์ f = ไฟล์ใหม่ ("样Image"+showpicture+".jpg"); m_image = ImageIO.read(f); } โมฆะสาธารณะ paintComponent (กราฟิก g) { g.drawImage (m_image, 0, 0, 360, 360, นี้); } }คลาสสาธารณะ J_Puzzle ขยาย JFrame ใช้งาน ActionListener{ /** * */ private static สุดท้ายแบบยาว serialVersionUID = 1L; อินท์ ฉัน,เจ; เวลาเปลี่ยนแปลง int แบบคงที่ = 0; คอนเทนเนอร์ c = getContentPane(); JButton b[] = JButton ใหม่[16]; ImageIcon ic[] = ImageIcon ใหม่ [2] [15]; J_Puzzle สาธารณะ () พ่น IOException { super ("拼上常戏"); สตริง pic_name[] = สตริงใหม่[15]; สำหรับ(i = 0;i < 2;i ++) สำหรับ(j = 0;j < 15;j ++) { pic_name[j] = String.valueOf(j+1+i*15)+".jpg "; ic[i][j] = ImageIcon ใหม่(pic_name[j]); } JMenuBar mBar = ใหม่ JMenuBar(); setJMenuBar(เอ็มบาร์); int k = 0; JMenu []m = {new JMenu("菜单(M)"),JMenu ใหม่("帮助(H)")}; ถ่าน mC[] = {{'M','H'},{'S','X','C','Z'},{'E','T'}}; JMenuItem mItem[][] = {{new JMenuItem("ขยาย始(S)"),JMenuItem("重置(X)"),new JMenuItem("背景更换(C)"),JMenuItem("退出( Z)")},{ใหม่ JMenuItem("查看样上(E)"),new JMenuItem("关于(T)")}}; สำหรับ(i = 0;i < 2;i ++) { mBar.add(m[i]); m[i].setMnemonic(mC[0][i]); ถ้า(i==0)k = 0; อย่างอื่น k = 1; สำหรับ (j = 0;j < 4-ik;j ++) { m[i].add(mItem[i][j]); mItem[i][j].setMnemonic(mC[i+1][j]); mItem[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl"+mC[i+1][j])); mItem [i] [j] .addActionListener (ActionListener ใหม่ () { โมฆะสาธารณะ actionPerformed (ActionEvent e) { JMenuItem mItem = (JMenuItem) e.getSource (); if(mItem.getText().equalsIgnoreCase("重置(X)")||mItem.getText().equalsIgnoreCase("เริ่มต้น(S)")) { int location[] = {{17,13},{17,103},{17,193},{17,283},{107,13},{107,103},{107,193},{107,283} ,{197,13},{197,103},{197,193},{197,283},{287,13},{287,103},{287,193},{287,283}}; int rd_number[] = new int[16]; = หมายเลขสุ่ม(); สำหรับ (i = 1;i < 16;i ++) b[i].setLocation(location[rd_number[i-1]-1][0],location[rd_number[i-1]-1][1]); } อื่น ๆ ถ้า(mItem .getText().equalsIgnoreCase("背景更换(C)")) { เวลาเปลี่ยน++; for(i = 0;i < 15;i ++) { b[i+1].setIcon(null); b[i+1].setIcon(ic[changetime][i]); } if(changetime==1) changetime = -1; } อื่น ๆ ถ้า(mItem.getText ().equalsIgnoreCase("退出(Z)")) { int a = JOptionPane.showConfirmDialog(null, "您确定退出游戏?"); if(a==0) System.exit(0); } else if(mItem.getText().equalsIgnoreCase("查看样上(E)")) { JFrame jj = ใหม่ JFrame("ภาพ"); jj.setSize(360, 360); jj.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/3-360, Toolkit.getDefaultToolkit().getScreenSize().height/4); jj.setVisible(จริง); คอนเทนเนอร์ c1 = jj.getContentPane(); ลอง { c1.add(new J_JPanel(),BorderLayout.CENTER); } catch (IOException e1) { // TODO catch block ที่สร้างขึ้นอัตโนมัติ e1.printStackTrace(); } } if(mItem.getText().equalsIgnoreCase("关于(T)")) { JOptionPane.showMessageDialog(null, "简单拼菜鸟"); - } } m[0].insertSeparator(1);m[1].insertSeparator(1); GridBagLayout gr = GridBagLayout ใหม่(); c.setLayout(gr); int gx[] = {0,1,2,3}; อินท์จี[] = {0,1,2,3}; อินท์ k1; มิติข้อมูล d = มิติใหม่ (90,90); สตริง s_number; GridBagConstraints gc = GridBagConstraints ใหม่ (); สำหรับ(i = 1;i < 5;i ++) { ถ้า(i==4)k1=4; อย่างอื่น k1=5; สำหรับ(j = 1;j < k1;j ++) { gc.gridx = gx[j-1]; gc.gridy = gy[i-1]; gc.fill = GridBagConstraints.NONE; s_number = String.valueOf(j+(i-1)*4); b[j+(i-1)*4] = JButton ใหม่(s_number,ic[0][j+(i-1)*4-1]); b[j+(i-1)*4].setPreferredSize(d); b[j+(i-1)*4].setFont(แบบอักษรใหม่("宋体",Font.PLAIN,0)); gr.setConstraints(b[j+(i-1)*4],gc); c.เพิ่ม(b[j+(i-1)*4]); } } สำหรับ(i = 1;i <16;i ++) b[i].addActionListener(สิ่งนี้); } การกระทำโมฆะสาธารณะดำเนินการ (ActionEvent e) { int j; JButton b = (JButton)e.getSource(); จุด p = b.getLocation(); จุด p1 = โมฆะ; for(j = -1;j < 2;j ++) { if(p.y+j*90>283||p.y+j*90<13) ดำเนินการต่อ; อื่น { ส่วนประกอบ a = c.getComponentAt(px, p.y+j*90); if(a.getHeight()!=90) p1 = จุดใหม่(px,p.y+j*90); } } for(j = -1;j < 2;j ++) { if(p.x+j*90>287||p.x+j*90<17) ดำเนินการต่อ; อื่น { ส่วนประกอบ a = c.getComponentAt(p.x+j*90, py); if(a.getHeight()!=90) p1 = จุดใหม่ (p.x+j*90,py); } } ถ้า(p1!=null) b.setLocation(p1.x, p1.y); if(check()==true) JOptionPane.showMessageDialog(null, "恭喜您成功了"); }/*产生随机数*/ public int[] Randomnumber() { สุ่ม rd = สุ่มใหม่(); int n[] = ใหม่ int[15]; สำหรับ(int i = 0 ;i < 15;i ++) { int temp = rd.nextInt(15)+1; n[i] = อุณหภูมิ; สำหรับ (int j = 0;j < i;j ++) if(n[j]==temp) { i--; หยุดพัก; } } กลับ n; } /*判断是否排序成功*/ public boolean check() { ตำแหน่งจุด[] = จุดใหม่[16]; บูลีนบ่อ = เท็จ; นับจำนวน=0; for(int i = 0;i < 4;i ++) for(int j = 0;j < 4;j ++) ตำแหน่ง[i*4+j] = จุดใหม่ (17+j*90, 13+ ฉัน*90); สำหรับ(int i = 0;i < 15;i ++) { if(b[i+1].getLocation().x==location[i].x&&b[i+1].getLocation().y= =สถานที่[i].y) นับ++; ถ้า(นับ==15) โบ=จริง; } กลับบ่อ; } โมฆะสาธารณะคงที่ main (String args []) พ่น IOException { แอป J_Puzzle = ใหม่ J_Puzzle (); app.setDefaultCloseOperation(EXIT_ON_CLOSE); app.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/3, Toolkit.getDefaultToolkit().getScreenSize().height/4); app.setSize(400,440); app.setVisible(จริง); app.setResizable(เท็จ); -
以上所述就是本文的全部内容了,希望对大家学习java能够有所帮助。