有這個代碼這麼多瘋狂的事情。我認爲這是要你想做的事:
import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import javax.swing.border.Border;
public class Iframe extends JFrame implements ActionListener {
public JPanel jp0 = new JPanel(new GridLayout());
public JPanel jp1 = new JPanel(new GridLayout(1, 3));
public JPanel jp2 = new JPanel(new BorderLayout());
Myclass my = new Myclass(100, 200, 300, 400, 500, 600, 700, 900, 800, 10000, 3000, 600);
public static void main(String args[]) {
new Iframe();
}
public Iframe() {
Border border = BorderFactory.createTitledBorder("Pentahexes");
jp1.setBorder(border);
ImageIcon Pentaheximg1 = new ImageIcon("E:/NetBeans/Pentahex-Game/src/pentahex/game/Pentahex1.jpg", "b1");
JButton Pentahexbutton1 = new JButton(Pentaheximg1);
Pentahexbutton1.addActionListener(this);
Pentahexbutton1.setName("b1");
jp1.add(Pentahexbutton1);
ImageIcon Pentaheximg2 = new ImageIcon("E:/NetBeans/Pentahex-Game/src/pentahex/game/Pentahex2.jpg", "b1");
JButton Pentahexbutton2 = new JButton(Pentaheximg2);
Pentahexbutton2.addActionListener(this);
Pentahexbutton2.setName("b2");
jp1.add(Pentahexbutton2);
ImageIcon Pentaheximg3 = new ImageIcon("E:/NetBeans/Pentahex-Game/src/pentahex/game/Pentahex3.jpg", "b1");
JButton Pentahexbutton3 = new JButton(Pentaheximg3);
Pentahexbutton3.addActionListener(this);
Pentahexbutton3.setName("b3");
jp1.add(Pentahexbutton3);
Border border2 = BorderFactory.createTitledBorder("Puzzle");
jp2.setBorder(border2);
jp0.add(jp1);
jp0.add(jp2);
jp2.add(my);
this.add(jp0);
this.add(jp2);
this.add(jp1, BorderLayout.EAST);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if("b1".equals(((JButton)e.getSource()).getName())) {
my.setData(100, 200, 300, 400, 500, 600, 700, 900, 800, 10000, 3000, 600);
}
if("b2".equals(((JButton)e.getSource()).getName())) {
my.setData(10, 20, 30, 400, 50, 60, 70, 80, 90, 100, 110, 120);
}
if("b3".equals(((JButton)e.getSource()).getName())) {
my.setData(10, 30, 45, 400, 60, 75, 90, 80, 90, 1000, 3010, 120);
}
my.drawpoly();
}
}
class Myclass extends JPanel {
int a, b, c, d, e, f, g1, h, i, j, k, l;
Myclass(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int x5, int y5, int x6, int y6) {
setData(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6);
}
public void setData(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int x5, int y5, int x6, int y6) {
a = x1;
b = y1;
c = x2;
d = y2;
e = x3;
f = y3;
g1 = x4;
h = y4;
i = x5;
j = y5;
k = x6;
l = y6;
}
public void drawpoly() {
invalidate();
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
int xcoordinatesofthehexagon[] = new int[] { a, c, e, g1, i, k };
int ycoordinatesofthehexagon[] = new int[] { b, d, f, h, j, l };
g.drawPolygon(xcoordinatesofthehexagon, ycoordinatesofthehexagon, 6);
}
}
UPDATE
import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map.Entry;
import javax.swing.border.Border;
public class Iframe extends JFrame implements ActionListener {
private static final String PATH = "E:/NetBeans/Pentahex-Game/src/pentahex/game/";
HashMap<String, int[]> pentahexMap = new HashMap<String, int[]>() {{
put("Clear", new int[]{ 0,0,0,0,0,0,0,0,0,0,0,0 });
put("Pentahex1", new int[]{ 0,0,0,50,50,50,25,25,50,0,0,0 });
put("Pentahex2", new int[]{ 100,100,100,150,150,150,125,125,150,100,100,100 });
put("Pentahex3", new int[]{ 10, 30, 45, 400, 60, 75, 90, 80, 90, 500, 310, 120 });
}};
private Myclass my = new Myclass();
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Iframe().setVisible(true);
}
});
}
public Iframe() {
JPanel jp0 = new JPanel(new GridLayout());
JPanel jp1 = new JPanel(new GridLayout(1, 3));
JPanel jp2 = new JPanel(new BorderLayout());
for(Entry<String, int[]> entry : pentahexMap.entrySet()) {
JButton pentahexbutton1;
try {
URL imgUrl = new URL(PATH + entry.getKey() +".jpg");
ImageIcon pentaheximg1 = new ImageIcon(imgUrl);
pentahexbutton1 = new JButton(pentaheximg1);
} catch(MalformedURLException e) {
pentahexbutton1 = new JButton(entry.getKey());
}
pentahexbutton1.addActionListener(this);
pentahexbutton1.setName(entry.getKey());
jp1.add(pentahexbutton1);
}
jp1.setBorder(BorderFactory.createTitledBorder("Pentahexes"));
jp2.setBorder(BorderFactory.createTitledBorder("Puzzle"));
jp0.add(jp1);
jp0.add(jp2);
jp2.add(my);
this.add(jp0);
this.add(jp2);
this.add(jp1, BorderLayout.EAST);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
@Override
public void actionPerformed(ActionEvent e) {
int[] data = pentahexMap.get(((JButton)e.getSource()).getName());
if(data != null) {
my.setData(data);
my.invalidate();
my.repaint();
}
}
}
class Myclass extends JPanel {
int a, b, c, d, e, f, g, h, i, j, k, l;
Myclass(){}
Myclass(int... data) {
setData(data);
}
public void setData(int... data) {
if(data.length < 12) {
throw new IllegalArgumentException("not enough data");
}
a = data[0];
b = data[1];
c = data[2];
d = data[3];
e = data[4];
f = data[5];
g = data[6];
h = data[7];
i = data[8];
j = data[9];
k = data[10];
l = data[11];
}
@Override
public void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
int[] xcoordinatesofthehexagon = new int[] { a, c, e, g, i, k };
int[] ycoordinatesofthehexagon = new int[] { b, d, f, h, j, l };
if(!isEmpty(xcoordinatesofthehexagon, ycoordinatesofthehexagon)){
graphics.drawPolygon(xcoordinatesofthehexagon, ycoordinatesofthehexagon, 6);
}
}
private boolean isEmpty(int[] x,int[] y) {
for(int i : y) {
if(i != 0) {
return false;
}
}
for(int i : x) {
if(i != 0) {
return false;
}
}
return true;
}
}
它可以是一個按鈕/ 2D image.sorry FR d垃圾郵件。 – pascal
你可以保留元素和[切換可見性](http://download.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#setVisible(boolean))? – aishwarya
@aishwarya:謝謝你,但是,我試圖這樣做,現在我正試圖檢查上述事情是否發生。下次會有3-4個面板,可見性會令人困惑。 – pascal