我有一個GUI在我的主類文件在另一個類文件
import java.awt.*;
import javax.swing.*;
public class TicTac extends JFrame {
TicTacEvent tictac = new TicTacEvent(this);
JPanel row1 = new JPanel();
JButton[][] boxes = new JButton[4][4];
JButton play = new JButton("Play");
JButton restart = new JButton("Restart");
JTextField blank1 = new JTextField();
JTextField blank2 = new JTextField();
JOptionPane win = new JOptionPane("Winner");
ImageIcon back = new ImageIcon("cardback.jpg");
public TicTac() {
super ("Tic Tac Toe");
setSize (800,650);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout layout = new FlowLayout();
setLayout(layout);
int name = 0;
String newname;
GridLayout layout1 = new GridLayout(5, 4, 10, 10);
row1.setLayout(layout1);
for (int x=0; x<=3; x++){
for (int y=0; y<=3; y++){
name = name + 1;
newname = Integer.toString(name);
boxes[x][y] = new JButton(newname);
boxes[x][y].setIcon(back);
row1.add(boxes[x][y]);
}
}
row1.add(blank1);
row1.add(play);
row1.add(blank2);
row1.add(restart);
add (row1);
play.addActionListener(tictac);
for (int x=0; x<=3; x++){
for (int y=0; y<=3; y++){
boxes[x][y].addActionListener(tictac);
}
}
setVisible(true);
}
public static void main(String[] arguments){
TicTac frame = new TicTac();
}
}
創建重置的JPanel,我一直在使用它的代碼在這裏
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class TicTacEvent implements ItemListener, ActionListener, Runnable {
TicTac gui;
Thread playing;
Thread restarting;
ImageIcon a = new ImageIcon("x.jpg");
ImageIcon b = new ImageIcon("o.jpg");
int clicks = 0;
int win = 0;
int winx = 0;
int winy = 0;
int cat = 0;
int[][] check = new int[4][4];
public TicTacEvent (TicTac in){
gui = in;
for (int row=0; row<=3; row++){
for (int col=0; col<=3; col++){
check[row][col]=0;
}
}
}
public void actionPerformed(ActionEvent event){
String command = event.getActionCommand();
if (command.equals("Play")) {
startPlaying();
} else if (command.equals("Restart")) {
restart();
}
if (command.equals("1")) {
b1();
}
if (command.equals("2")) {
b2();
}
if (command.equals("3")) {
b3();
}
if (command.equals("4")) {
b4();
}
if (command.equals("5")) {
b5();
}
if (command.equals("6")) {
b6();
}
if (command.equals("7")) {
b7();
}
if (command.equals("8")) {
b8();
}
if (command.equals("9")) {
b9();
}
if (command.equals("10")) {
b10();
}
if (command.equals("11")) {
b11();
}
if (command.equals("12")) {
b12();
}
if (command.equals("13")) {
b13();
}
if (command.equals("14")) {
b14();
}
if (command.equals("15")) {
b15();
}
if (command.equals("16")) {
b16();
}
gui.blank1.setText("X Wins: " + winx + " Y Wins:" + winy);
gui.blank2.setText("Cat Wins(Tie):" + cat);
}
void b1() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[0][0].setIcon(a);
check[0][0] = 1;
} else {
gui.boxes[0][0].setIcon(b);
check[0][0] = 2;
}
winner();
}
void b2() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[0][1].setIcon(a);
check[0][1] = 1;
} else {
gui.boxes[0][1].setIcon(b);
check[0][1] = 2;
}
winner();
}
void b3() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[0][2].setIcon(a);
check[0][2] = 1;
} else {
gui.boxes[0][2].setIcon(b);
check[0][2] = 2;
}
winner();
}
void b4() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[0][3].setIcon(a);
check[0][3] = 1;
} else {
gui.boxes[0][3].setIcon(b);
check[0][3] = 2;
}
winner();
}
void b5() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[1][0].setIcon(a);
check[1][0] = 1;
} else {
gui.boxes[1][0].setIcon(b);
check[1][0] = 2;
}
winner();
}
void b6() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[1][1].setIcon(a);
check[1][1] = 1;
} else {
gui.boxes[1][1].setIcon(b);
check[1][1] = 2;
}
winner();
}
void b7() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[1][2].setIcon(a);
check[1][2] = 1;
} else {
gui.boxes[1][2].setIcon(b);
check[1][2] = 2;
}
winner();
}
void b8() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[1][3].setIcon(a);
check[1][3] = 1;
} else {
gui.boxes[1][3].setIcon(b);
check[1][3] = 2;
}
winner();
}
void b9() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[2][0].setIcon(a);
check[2][0] = 1;
} else {
gui.boxes[2][0].setIcon(b);
check[2][0] = 2;
}
winner();
}
void b10() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[2][1].setIcon(a);
check[2][1] = 1;
} else {
gui.boxes[2][1].setIcon(b);
check[2][1] = 2;
}
winner();
}
void b11() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[2][2].setIcon(a);
check[2][2] = 1;
} else {
gui.boxes[2][2].setIcon(b);
check[2][2] = 2;
}
winner();
}
void b12() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[2][3].setIcon(a);
check[2][3] = 1;
} else {
gui.boxes[2][3].setIcon(b);
check[2][3] = 2;
}
winner();
}
void b13() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[3][0].setIcon(a);
check[3][0] = 1;
} else {
gui.boxes[3][0].setIcon(b);
check[3][0] = 2;
}
winner();
}
void b14() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[3][1].setIcon(a);
check[3][1] = 1;
} else {
gui.boxes[3][1].setIcon(b);
check[3][1] = 2;
}
winner();
}
void b15() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[3][2].setIcon(a);
check[3][2] = 1;
} else {
gui.boxes[3][2].setIcon(b);
check[3][2] = 2;
}
winner();
}
void b16() {
clicks = clicks + 1;
if ((clicks%2)==1){
gui.boxes[3][3].setIcon(a);
check[3][3] = 1;
} else {
gui.boxes[3][3].setIcon(b);
check[3][3] = 2;
}
winner();
}
public void winner() {
/** Check rows for winner */
for (int x=0; x<=3; x++){
if ((check[x][0]==check[x][1])&&(check[x][0]==check[x][2]) && (check[x][0]== check[x][3])) {
if (check[x][0] ==1) {
JOptionPane.showMessageDialog(null, "X is the winner");
win = 1;
winx +=1;
} else if (check[x][0]==2){
JOptionPane.showMessageDialog(null, "Y is the winner");
win = 1;
winy +=1;
}
}
}
/** Check columns for winner */
for (int x=0; x<=3; x++){
if ((check[0][x]==check[1][x])&&(check[0][x]==check[2][x])&& (check[0][x]== check[3][x])) {
if (check[0][x]==1) {
JOptionPane.showMessageDialog(null, "X is the winner");
win = 1;
winx +=1;
} else if (check[0][x]==2) {
JOptionPane.showMessageDialog(null, "Y is the winner");
win = 1;
winy +=1;
}
}
}
if ((check[1][1]== 1) && (check[3][3] == 1) && (check[2][2]==1) && (check[0][0]==1)
|| (check[3][0]==1) &&(check[1][2]==1) &&(check[0][3]==1))
{
JOptionPane.showMessageDialog(null, "X is the winner");
win = 1;
winx +=1;
} else if ((check[1][1]== 2) && (check[3][3] == 2) && (check[2][2]==2) && (check[0][0]==2)
|| (check[3][0]==2) &&(check[1][2]==2) &&(check[0][3]==2)) {
JOptionPane.showMessageDialog(null, "Y is the winner");
win = 1;
winy +=1;
}
//}
/** Checks if the game is a tie */
if ((clicks==16) && (win==0)) {
JOptionPane.showMessageDialog(null, "The game is a tie");
cat =+1;
}
}
public void startPlaying() {
playing = new Thread(this);
playing.start();
gui.play.setEnabled(false);
}
public void restart() {
TicTac restartok = new TicTac();
restartok.row1.add(restartok.blank1);
restartok.row1.add(restartok.play);
restartok.row1.add(restartok.blank2);
restartok.row1.add(restartok.restart);
restartok.add (restartok.row1);
restartok.play.addActionListener(restartok.tictac);
for (int x=0; x<=3; x++){
for (int y=0; y<=3; y++){
restartok.boxes[x][y].addActionListener(restartok.tictac);
}
}
}
public void itemStateChanged(ItemEvent e) {
// throw new UnsupportedOperationException("Not supported yet.");
}
public void run() {
//restart();
//throw new UnsupportedOperationException("Not supported yet.");
}
}
但是我的問題是我怎麼會重置GUI,我有一些想法..
構造函數「Public TicTac」創建gui,但我不知道如何通過另一個類文件再次發生。我OOP的理解是,有一個構造函數,我可以通過這樣assumedly創建一個對象
TicTac restartok = new TicTac();
打電話,你會認爲我會創造另一個的JPanel/GUI每次我叫重啓();方法,不是?
我的OOP exirence是有限的,所以我沒有線索在哪裏開始或找出什麼邏輯是不正確的。謝謝。
您正通過構造函數將TicTac對象傳遞給TicTacEvent。我認爲,您可以通過重新啓動功能重新使用同一個對象。我對此沒有把握,創建事件和EventListener檢查觀察者模式將對您有所幫助 –
如果您創建GUI模型並將其與GUI視圖分開,那麼您可以通過重新初始化模型字段來重新啓動GUI模型。沒有必要重新創建視圖。該模式被稱爲[模型/視圖/控制器模式](http://en.wikipedia.org/wiki/Model_View_Controller)。 –
@PramodPP你能澄清一下嗎? – Alivesi