2013-01-25 21 views
-1

我試圖建立一個益智遊戲,但我似乎無法將圖像裁剪成相等的部分,我不知道如何創建一個動作偵聽器,將一個特定的按鈕轉移到最右下角最自由的空間照片拼圖板面積如何在左側的遊戲面板中以隨機順序顯示像拼圖這樣的裁剪圖像,並讓用戶解決難題?

謝謝!

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import javax.swing.JLabel; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.Image; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.image.CropImageFilter; 
import java.awt.image.FilteredImageSource; 

import javax.swing.Box; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class midterm extends JFrame 
{ 
    JPanel mainpanel; 
    JPanel gamepanel; 
    JPanel controls; 

    JButton image1=new JButton(); 
    JButton image2=new JButton(); 
    JButton image3=new JButton(); 
    JButton image4=new JButton(); 
    JButton image5=new JButton(); 
    JButton image6=new JButton(); 
    JButton image7=new JButton(); 
    JButton image8=new JButton(); 
    JButton image9=new JButton(); 

    JButton j1=new JButton(); 

    ExitButtonListener end=new ExitButtonListener(); 

    JLabel text=new JLabel("Please select a photo."); 
    JLabel piclabel; 



    public midterm() 
    { 
     super("Girls' Generation - I GOT A BOY 4th Korean Album"); 
     setSize(700,700); 
     setLocation(200,30); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
     setResizable(false); 

     panel(); 
     this.getContentPane().add(mainpanel); 
     this.pack(); 
     setVisible(true); 
    } 



    public static void main(String[] args) 
    { 
     midterm frame=new midterm(); 
    } 



    void panel() 
    { 
     mainpanel=new JPanel(); 
     mainpanel.setLayout(new BorderLayout()); 


     gamepanel=new JPanel(); 
     gamepanel.setBorder(BorderFactory.createTitledBorder("Photo Puzzle")); 
     gamepanel.setLayout(new GridLayout(3,3)); 


     ImageIcon sica = new ImageIcon("jung.jpg"); 
     image1.setBorder(BorderFactory.createLineBorder(Color.blue)); 
     image1.setIcon(sica); 
     image1.setSize(200,200); 
     image1.setVisible(true); 
     image1.setToolTipText("Jessica Jung Sooyeon"); 
     gamepanel.add((image1)); 

     ImageIcon yuri = new ImageIcon("kwon.jpg"); 
     image2.setIcon(yuri); 
     image2.setSize(200,200); 
     image2.setVisible(true); 
     image2.setToolTipText("Kwon Yuri"); 
     gamepanel.add(image2); 

     ImageIcon tiff = new ImageIcon("hwang.jpg"); 
     image3.setIcon(tiff); 
     image3.setSize(200,200); 
     image3.setVisible(true); 
     image3.setToolTipText("Tiffany Hwang Miyoung"); 
     gamepanel.add(image3); 

     ImageIcon sunny = new ImageIcon("lee.jpg"); 
     image4.setIcon(sunny); 
     image4.setSize(200,200); 
     image4.setVisible(true); 
     image4.setToolTipText("Sunny Lee Sunkyu");  
     gamepanel.add(image4); 

     ImageIcon soo = new ImageIcon("choi.jpg"); 
     image5.setIcon(soo); 
     image5.setSize(200,200); 
     image5.setVisible(true); 
     image5.setToolTipText("Choi Sooyoung"); 
     gamepanel.add(image5); 

     ImageIcon hyo = new ImageIcon("kimh.jpg"); 
     image6.setIcon(hyo); 
     image6.setSize(200,200); 
     image6.setVisible(true); 
     image6.setToolTipText("Kim Hyoyeon"); 
     gamepanel.add(image6); 

     ImageIcon yoona = new ImageIcon("im.jpg"); 
     image7.setIcon(yoona); 
     image7.setSize(200,200); 
     image7.setVisible(true); 
     image7.setToolTipText("Im Yoona");  
     gamepanel.add(image7); 

     ImageIcon taeng = new ImageIcon("kimt.jpg"); 
     image8.setIcon(taeng); 
     image8.setSize(200,200); 
     image8.setVisible(true); 
     image8.setToolTipText("Kim Taeyeon"); 
     gamepanel.add(image8); 

     ImageIcon hyunnie = new ImageIcon("seo.jpg"); 
     image9.setIcon(hyunnie); 
     image9.setSize(200,200); 
     image9.setVisible(true); 
     image9.setToolTipText("Seohyun Seo Juhyun"); 
     gamepanel.add(image9); 



     controls = new JPanel(); 
     controls.setLayout(new BorderLayout()); 
     controls.setBorder(BorderFactory.createTitledBorder("Control")); 

     JButton newGame = new JButton("New Game"); 
     newGame.addActionListener(new NewButtonListener()); 
     controls.add(newGame, BorderLayout.NORTH); 


     JButton exitGame = new JButton("Exit"); 
     exitGame.addActionListener(end); 
     controls.add(exitGame, BorderLayout.SOUTH); 


     //controls.add(text, BorderLayout.SOUTH); 

     mainpanel.add(gamepanel, BorderLayout.CENTER); 
     mainpanel.add(controls, BorderLayout.EAST); 

     mainpanel.setVisible(true); 

     process jj = new process(); 

     image1.addActionListener(jj); 
     image2.addActionListener(jj); 
     image3.addActionListener(jj); 
     image4.addActionListener(jj); 
     image5.addActionListener(jj); 
     image6.addActionListener(jj); 
     image7.addActionListener(jj); 
     image8.addActionListener(jj); 
     image9.addActionListener(jj); 


    } 

    class process implements ActionListener 
    { 
     public void actionPerformed (ActionEvent e) 
     { 
      if(e.getSource().equals(image1)) 
      { 
       image1.setVisible(false); 
       image2.setVisible(false); 
       image3.setVisible(false); 
       image4.setVisible(false); 
       image5.setVisible(false); 
       image6.setVisible(false); 
       image7.setVisible(false); 
       image8.setVisible(false); 
       image9.setVisible(false); 
       text.setVisible(false); 

       ImageIcon pic=new ImageIcon("jung.jpg"); 
       piclabel=new JLabel(); 
       piclabel.setIcon(pic); 
       piclabel.setToolTipText("Your guide! This is Jessica Jung"); 
       controls.add(piclabel, BorderLayout.CENTER); 






      } 

      else if(e.getSource().equals(image2)) 
      { 
       image1.setVisible(false); 
       image2.setVisible(false); 
       image3.setVisible(false); 
       image4.setVisible(false); 
       image5.setVisible(false); 
       image6.setVisible(false); 
       image7.setVisible(false); 
       image8.setVisible(false); 
       image9.setVisible(false); 
       text.setVisible(false); 

       ImageIcon pic=new ImageIcon("kwon.jpg"); 
       piclabel=new JLabel(); 
       piclabel.setIcon(pic); 
       piclabel.setToolTipText("Your guide! This is Yuri Kwon"); 
       controls.add(piclabel, BorderLayout.CENTER); 


      } 

      else if(e.getSource().equals(image3)) 
      { 
       image1.setVisible(false); 
       image2.setVisible(false); 
       image3.setVisible(false); 
       image4.setVisible(false); 
       image5.setVisible(false); 
       image6.setVisible(false); 
       image7.setVisible(false); 
       image8.setVisible(false); 
       image9.setVisible(false); 
       text.setVisible(false); 

       ImageIcon pic=new ImageIcon("hwang.jpg"); 
       piclabel=new JLabel(); 
       piclabel.setIcon(pic); 
       piclabel.setToolTipText("Your guide! This is Tiffany Hwang"); 
       controls.add(piclabel, BorderLayout.CENTER); 

      } 

      else if(e.getSource().equals(image4)) 
      { 
       image1.setVisible(false); 
       image2.setVisible(false); 
       image3.setVisible(false); 
       image4.setVisible(false); 
       image5.setVisible(false); 
       image6.setVisible(false); 
       image7.setVisible(false); 
       image8.setVisible(false); 
       image9.setVisible(false); 
       text.setVisible(false); 

       ImageIcon pic=new ImageIcon("lee.jpg"); 
       piclabel=new JLabel(); 
       piclabel.setIcon(pic); 
       piclabel.setToolTipText("Your guide! This is Sunny Lee"); 
       controls.add(piclabel, BorderLayout.CENTER); 

      } 

      else if(e.getSource().equals(image5)) 
      { 
       image1.setVisible(false); 
       image2.setVisible(false); 
       image3.setVisible(false); 
       image4.setVisible(false); 
       image5.setVisible(false); 
       image6.setVisible(false); 
       image7.setVisible(false); 
       image8.setVisible(false); 
       image9.setVisible(false); 
       text.setVisible(false); 

       ImageIcon pic=new ImageIcon("choi.jpg"); 
       piclabel=new JLabel(); 
       piclabel.setIcon(pic); 
       piclabel.setToolTipText("Your guide! This is Sooyoung Choi"); 
       controls.add(piclabel, BorderLayout.CENTER); 

      } 

      else if(e.getSource().equals(image6)) 
      { 
       image1.setVisible(false); 
       image2.setVisible(false); 
       image3.setVisible(false); 
       image4.setVisible(false); 
       image5.setVisible(false); 
       image6.setVisible(false); 
       image7.setVisible(false); 
       image8.setVisible(false); 
       image9.setVisible(false); 
       text.setVisible(false); 

       ImageIcon pic=new ImageIcon("kimh.jpg"); 
       piclabel=new JLabel(); 
       piclabel.setIcon(pic); 
       piclabel.setToolTipText("Your guide! This is Hyoyeon Kim"); 
       controls.add(piclabel, BorderLayout.CENTER); 

      } 

      else if(e.getSource().equals(image7)) 
      { 
       image1.setVisible(false); 
       image2.setVisible(false); 
       image3.setVisible(false); 
       image4.setVisible(false); 
       image5.setVisible(false); 
       image6.setVisible(false); 
       image7.setVisible(false); 
       image8.setVisible(false); 
       image9.setVisible(false); 
       text.setVisible(false); 

       ImageIcon pic=new ImageIcon("im.jpg"); 
       piclabel=new JLabel(); 
       piclabel.setIcon(pic); 
       piclabel.setToolTipText("Your guide! This is Yoona Im"); 
       controls.add(piclabel, BorderLayout.CENTER); 

      } 

      else if(e.getSource().equals(image8)) 
      { 
       image1.setVisible(false); 
       image2.setVisible(false); 
       image3.setVisible(false); 
       image4.setVisible(false); 
       image5.setVisible(false); 
       image6.setVisible(false); 
       image7.setVisible(false); 
       image8.setVisible(false); 
       image9.setVisible(false); 
       text.setVisible(false); 

       ImageIcon pic=new ImageIcon("kimt.jpg"); 
       piclabel=new JLabel(); 
       piclabel.setIcon(pic); 
       piclabel.setToolTipText("Your guide! This is Taeyeon Kim"); 
       controls.add(piclabel, BorderLayout.CENTER); 

      } 

      else if(e.getSource().equals(image9)) 
      { 
       image1.setVisible(false); 
       image2.setVisible(false); 
       image3.setVisible(false); 
       image4.setVisible(false); 
       image5.setVisible(false); 
       image6.setVisible(false); 
       image7.setVisible(false); 
       image8.setVisible(false); 
       image9.setVisible(false); 
       text.setVisible(false); 

       ImageIcon pic=new ImageIcon("seo.jpg"); 
       piclabel=new JLabel(); 
       piclabel.setIcon(pic); 
       piclabel.setToolTipText("Your guide! This is Juhyun Seo"); 
       controls.add(piclabel, BorderLayout.CENTER); 

      }   
     } 


    } 

    class ExitButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      System.exit(0); 
     } 
    } 

    class NewButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
       image1.setVisible(true); 
       image2.setVisible(true); 
       image3.setVisible(true); 
       image4.setVisible(true); 
       image5.setVisible(true); 
       image6.setVisible(true); 
       image7.setVisible(true); 
       image8.setVisible(true); 
       image9.setVisible(true); 
       piclabel.setVisible(false); 
       j1.setVisible(false); 

     } 
    } 


} 
+0

爲了得到更好的幫助,立即發佈[SSCCE](http://sscce.org/)(第一件事,而不是一個帶有9個單元格的3x3網格,具有4個單元格的2x2網格)。 –

+0

看看[這](http://stackoverflow.com/questions/11819669/absolute-positioning-graphic-jpanel-inside-jframe-blocked-by-blank-sections/11820847#11820847)的一些想法,關於如何「剪切」您的圖像... – MadProgrammer

回答

3

將在照片拼圖的 右下角大部分地區特定按鈕轉移到自由空間面板

controls面板使用BorderLayout,但你已經在使用NORTHSOUTH職位。

我會嘗試使用GridLayoutGridBagLayout。該GridBagLayout可以被配置爲維護按鈕的首選大小...

另一個問題是你做你編未resiable,難以讓新按鈕變得可見(或至少我沒有因爲我沒有使用任何圖像;))。我個人不能忍受不可調整大小的窗口,但是這是我的;)

如果你有在圖像上的大小控制,你可以簡單地創建一個空白/透明的形象,並設置它作爲picLabel默認圖標,在啓動時添加到controls面板。然後,您需要做的就是根據需要更改標籤的圖標。