2016-05-28 5 views
-1

Я пишу программу для моего финального проекта школы. Я написал весь проект с кадрами, только чтобы узнать, что это должен быть апплет. Поэтому я попытался преобразовать все, но он не работает.Как сделать работу графического интерфейса в веб-браузере?

Исходный код:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.ArrayList; 
import java.applet.Applet; 
public class AlteredBattleship extends Applet implements ActionListener{ 
    int ro;//holds row input 
    int co;//holds column input 
    int[][] shots=new int[10][10];//holds all shots taken 
    boolean displayLose=false;//boolean triggers if game is lost 
    boolean displayWin=false;//boolean triggers if game is won 
    //the next six variables hold how many parts of ships haven't been hit 
    int two=2; 
    int three=3; 
    int four=4; 
    int threeTwo=3; 
    int five=5; 
    //boolean triggers if a boat is sunk 
    boolean twoSunk=false; 
    boolean threeSunk=false; 
    boolean threeTwoSunk=false; 
    boolean fourSunk=false; 
    boolean fiveSunk=false; 
    //holds difficulty 
    boolean b=true; 
    boolean n=false; 
    boolean e=false; 
    ArrayList<Integer> misses= new ArrayList<Integer>();//holds all missed shots 
    ArrayList<Integer> hits= new ArrayList<Integer>();//holds all hit shots 
    int shotCount=75;//how many shots player has to win 
    int[][] board=new int[10][10];//holds all ship positions 
    JApplet main =new JApplet();//holds all graphics 
    TextField input=new TextField(2);//takes input from player 
    TextField count=new TextField(2);//displays shots left 
    public void actionPerformed(ActionEvent e) { 
    }; 
    //places the four long ship 
    public void placeFour(){ 
    int fourStartx=(int)(Math.random()*5); 
    int fourStarty=(int)(Math.random()*9); 
    for(int i=0; i<4; i++){ 
     board[fourStartx+i][fourStarty]=4; 
    } 
    } 
    //places the three long ship 
    public void placeThree(){ 
    int threeStartx=(int)(Math.random()*9); 
    int threeStarty=(int)(Math.random()*6); 
    if(board[threeStartx][threeStarty]==0&& board[threeStartx][threeStarty+1]==0&&board[threeStartx][threeStarty+2]==0){ 
     board[threeStartx][threeStarty]=3; 
     board[threeStartx][threeStarty+1]=3; 
     board[threeStartx][threeStarty+2]=3; 
    } 
    else 
     this.placeThree(); 
    } 
    //places the two long ship 
    public void placeTwo(){ 
    int twoStartx=(int)(Math.random()*7); 
    int twoStarty=(int)(Math.random()*9); 
    if(board[twoStartx][twoStarty]==0&& board[twoStartx+1][twoStarty]==0){ 
     board[twoStartx][twoStarty]=2; 
     board[twoStartx+1][twoStarty]=2; 
    } 
    else 
     this.placeTwo(); 
    } 
    //places the second three long ship 
    public void placeThreeTwo(){ 
    int threeStartx=(int)(Math.random()*6); 
    int threeStarty=(int)(Math.random()*9); 
    if(board[threeStartx][threeStarty]==0&& board[threeStartx+1][threeStarty]==0&&board[threeStartx+2][threeStarty]==0){ 
     board[threeStartx][threeStarty]=6; 
     board[threeStartx+1][threeStarty]=6; 
     board[threeStartx+2][threeStarty]=6; 
    } 
    else 
     this.placeThreeTwo(); 
    } 
    //places the five long ship 
    public void placeFive(){ 
    int twoStartx=(int)(Math.random()*9); 
    int twoStarty=(int)(Math.random()*4); 
    if(board[twoStartx][twoStarty]==0&& board[twoStartx][twoStarty+1]==0&& board[twoStartx][twoStarty+2]==0&& board[twoStartx][twoStarty+3]==0&& board[twoStartx][twoStarty+4]==0){ 
     board[twoStartx][twoStarty]=5; 
     board[twoStartx][twoStarty+1]=5; 
     board[twoStartx][twoStarty+2]=5; 
     board[twoStartx][twoStarty+3]=5; 
     board[twoStartx][twoStarty+4]=5; 
    } 
    else 
     this.placeFive(); 
    } 
    //this method creates the frame and builds the interactable parts of the GUI 
    public void init() { 
    main = new JApplet(); 
    DrawPanel drawPanel = new DrawPanel(); 
    main.add(drawPanel); 
    JPanel holder=new JPanel(); 
    JPanel line=new JPanel(); 
    JPanel space=new JPanel(); 
    space.setMaximumSize(new Dimension(50,150)); 
    space.setBackground(Color.lightGray); 
ButtonGroup level=new ButtonGroup();//holds all difficulty radioButtons 
JRadioButton beginner = new JRadioButton();//beginner difficulty button 
beginner.setSelected(true); 
beginner.setBackground(Color.lightGray); 
beginner.addActionListener(new ActionListener() { //makes the button set difficulty to beginner 
public void actionPerformed(ActionEvent i) { 
    b=true; 
    n=false; 
    e=false; 
} 
}); 
space.add(beginner);//adds button to panel 
JRadioButton normal = new JRadioButton();//normal difficulty button 
normal.setBackground(Color.lightGray); 
space.add(normal);//adds button to panel 
normal.addActionListener(new ActionListener() { //makes the button set difficulty to normal 
public void actionPerformed(ActionEvent i) { 
    b=false; 
    n=true; 
    e=false; 
} 
}); 
JRadioButton expert = new JRadioButton(); 
expert.setBackground(Color.lightGray); 
expert.addActionListener(new ActionListener() {//makes the button set difficulty to expert 
public void actionPerformed(ActionEvent i) { 
    b=false; 
    n=false; 
    e=true; 
} 
}); 
space.add(expert);//adds button to panel 
level.add(beginner); 
level.add(normal); 
level.add(expert); 
count.setEditable(false); 
count.setText(Integer.toString(shotCount)); 
line.setMaximumSize(new Dimension(105,100)); 
line.setBackground(Color.lightGray); 
line.add(count); 
holder.setLayout(new BoxLayout(holder, BoxLayout.Y_AXIS));//creates panel that holds all other panels 
holder.setMaximumSize(new Dimension(20,50)); 
JPanel inputHold=new JPanel();//creates panel that holds input textField 
inputHold.setMaximumSize(new Dimension(40,100)); 
inputHold.add(input);//adds textField to panel 
//makes input take shot and put it through program 
input.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent e) { 
    String row=input.getText().substring(0,1);//makes the first letter of input the row 
    String column=input.getText().substring(1,input.getText().length());//makes number portion column 
    ro=row.compareTo("A");//makes row a number representation 
    co=Integer.parseInt(column)-1;//makes the String into int 
    if(row.compareTo("A")<10 && Integer.parseInt(column)<=10&&shots[ro][co]==0){//makes sure shot is in bounds and not already called 
    if(board[ro][co]==0){//checks for miss 
     misses.add(ro); 
     misses.add(co); 
    } 
    else{//makes sure it's a hit 
     hits.add(ro); 
     hits.add(co); 
     if(board[ro][co]==2){//checks if hit is two ship 
     two--; 
     if (two==0)//checks to see if two is sunk 
      twoSunk=true; 
     } 
     else if(board[ro][co]==3){//checks if hit is three ship 
     three--; 
     if (three==0)//checks to see if three is sunk 
      threeSunk=true; 
     } 
     else if(board[ro][co]==6){//checks if hit is other three ship 
     threeTwo--; 
     if(threeTwo==0)//checks if other three ship is sunk 
      threeTwoSunk=true; 
     } 
     else if(board[ro][co]==4){//check if hit is four ship 
     four--; 
     if (four==0)//check if four ship is sunk 
      fourSunk=true; 
     } 
     else if(board[ro][co]==5){//check if hit is five ship 
     five--; 
     if(five==0)//check if five ship is sunk 
      fiveSunk=true; 
     } 
    } 
    shotCount--;//takes away a shot 
    shots[ro][co]=1;//remembers spot as an already taken shot 
    } 
    if(twoSunk&&threeSunk&&fourSunk&&threeTwoSunk&&fiveSunk){//checks for win status 
    displayWin=true; 
    } 
    input.setText("");//resets textField 
    //frame.repaint();//resets board with new shot 
    count.setText(Integer.toString(shotCount));//resets shotCount to new number 
    if(shotCount==0){//checks for lose status 
    displayLose=true; 
    input.setEditable(false); 
    } 

} 
}); 
JPanel spacer=new JPanel(); 
JButton newB=new JButton("New Game");//creates new game button 
newB.addActionListener(new ActionListener() { //makes button work 
public void actionPerformed(ActionEvent i) { 
    //resets all variables to new game status 
    displayLose=false; 
    displayWin=false; 
    twoSunk=false; 
    threeSunk=false; 
    threeTwoSunk=false; 
    fourSunk=false; 
    fiveSunk=false; 
    two=2; 
    three=3; 
    threeTwo=3; 
    four=4; 
    five=5; 
    misses= new ArrayList<Integer>(); 
    hits= new ArrayList<Integer>(); 
    if(b) 
    shotCount=75; 
    else if(n) 
    shotCount=65; 
    else if(e) 
    shotCount=50; 
    count.setText(Integer.toString(shotCount)); 
    board=new int[10][10]; 
    shots=new int[10][10]; 
    placeFour(); 
    placeThree(); 
    placeThreeTwo(); 
    placeFive(); 
    placeTwo(); 
    main.repaint(); 
} 
}); 
//adds all panels to frame 
spacer.add(newB,BorderLayout.NORTH); 
spacer.setBackground(Color.lightGray); 
inputHold.setBackground(Color.lightGray); 
spacer.setBackground(Color.lightGray); 
spacer.setMaximumSize(new Dimension(100,32)); 
holder.add(space,BorderLayout.NORTH); 
holder.add(line,BorderLayout.NORTH); 
holder.add(inputHold, BorderLayout.NORTH); 
holder.add(spacer,BorderLayout.SOUTH); 
holder.setBackground(Color.lightGray); 
main.add(holder,BorderLayout.EAST); 
main.setVisible(true); 
//places ships 
this.placeFour(); 
this.placeThree(); 
this.placeTwo(); 
this.placeThreeTwo(); 
this.placeFive(); 
    } 

И мой HTML является: <EMBED type="application/x-java-applet;version=1.2" code="AlteredBattleship.class" WIDTH=680 HEIGHT=400> </EMBED> Мне очень жаль, если ответ действительно очевиден Я довольно новыми для Java и очень новой для графики. Спасибо за ваше время

+0

Не используйте апплеты, они устарели в Java 1.9, и они будут удалены с Java 1.10. – gouessej

ответ

1

Вы ошиблись.

public class AlteredBattleship extends Applet implements ActionListener 

должно быть:

public class AlteredBattleship extends JApplet implements ActionListener 

Если апплет по-прежнему не работает, пожалуйста, сообщите.

+0

Очень вероятно, что я могу ошибиться. Я не знаю, что такое класс DrawPanel. – Soumil

+0

Он действительно работает спасибо. Извините, я не включил drawPanel. Я не считал, что это актуально. –

+0

Я рад помочь. – Soumil