62,614
社区成员
发帖
与我相关
我的任务
分享
button=new JButton();
//button.setBorder(null);
button.setBorderPainted(false);
button.setContentAreaFilled(false);
button.setFocusPainted(false);
button.setPreferredSize(new Dimension(width/3,height/4));
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;
import javax.swing.SwingUtilities;
public class Puzzle extends JFrame implements ActionListener {
private Image image;
private Image source;
private JButton button;
private JLabel label;
private JPanel centerPanel;
private final int[][] pos = {{0,1,2},{3,4,5},{6,7,8},{9,10,11}};
private int width,height;
public Puzzle(){
initUI();
}
private final void initUI(){
centerPanel=new JPanel();
centerPanel.setLayout(new GridLayout(4,3,0,0));
ImageIcon sid=new ImageIcon(Puzzle.class.getResource("satellite028(1).jpg"));
source=sid.getImage();
width=sid.getIconWidth();
height=sid.getIconHeight();
System.out.println(width);
System.out.println(height);
//add(Box.createRigidArea(new Dimension(0,5)),BorderLayout.NORTH);
add(centerPanel,BorderLayout.CENTER);
for(int i=0;i<4;i++){
for(int j=0;j<3;j++){
if(j==2&&i==3){
label=new JLabel();
centerPanel.add(label);
}
else{
button=new JButton();
//button.setBorder(null);
button.setBorderPainted(false);
button.setContentAreaFilled(false);
button.setFocusPainted(false);
button.setPreferredSize(new Dimension(width/3,height/4));
button.addActionListener(this);
centerPanel.add(button);
image=createImage(new
FilteredImageSource(source.getSource(),
new CropImageFilter(j*(width/3),i*(height/4),(width/3),height/4)));
button.setIcon(new ImageIcon(image));
System.out.println(j*(width/3));
System.out.println(i*(height/4));
System.out.println(width/3);
System.out.println(height/4);
}
}
}
setTitle("Pupple");
pack();
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
JButton button=(JButton)e.getSource();
Dimension size=button.getSize();
int labelX=label.getX();
int labelY=label.getY();
int buttonX=button.getX();
int buttonY=button.getY();
int buttonPosX=buttonX/size.width;
int buttonPosY=buttonY/size.height;
int buttonIndex=pos[buttonPosY][buttonPosX];
//label在下
if(labelX==buttonX &&(labelY-buttonY)==size.height){
int labelIndex=buttonIndex+3;
centerPanel.remove(button);
centerPanel.remove(label);
centerPanel.add(label,buttonIndex);
centerPanel.add(button,labelIndex);
centerPanel.revalidate();
}
if(labelX==buttonX&&(labelY-buttonY)==-size.height){
int labelIndex=buttonIndex-3;
centerPanel.remove(button);
centerPanel.remove(label);
centerPanel.add(button,labelIndex);
centerPanel.add(label,buttonIndex);
centerPanel.revalidate();
}
if(labelY==buttonY&&(labelX-buttonX)==size.width){
int labelIndex=buttonIndex+1;
centerPanel.remove(button);
centerPanel.remove(label);
centerPanel.add(label,buttonIndex);
centerPanel.add(button,labelIndex);
centerPanel.revalidate();
}
if(labelY==buttonY&&(labelX-buttonX)==-size.width){
int labelIndex=buttonIndex-1;
centerPanel.remove(button);
centerPanel.remove(label);
centerPanel.add(button,labelIndex);
centerPanel.add(label,buttonIndex);
centerPanel.revalidate();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
Puzzle pz=new Puzzle();
pz.setVisible(true);
}
});
}
}