Dobra wiec w moim programie chodzi o mniej wiecej cos takiego:
Mam 3 klasy:
Square - Ma narysowac w applecie kwardrat ktory reaguje na akcje uzytkownika (w tym wypadku zmienia rozmiar przy kliknieciu)
Ship - To samo co wyzej, z tym ze ma to byc zrobione z 5 "Square"
I teraz ten z ktorym mam problem, "FleetOfShips" czyli 5 "Ships" na raz
Kod:
Square:
Kod:
package assignment1;
import java.awt.*;
public class Square
{
private double x,y;
public Color color;
private int side;
public Square()
{
x = 100;
y = 100;
side = 5;
color = Color.orange;
}
public void draw(Graphics g)
{
g.setColor(color);
g.fillRect( (int)(x), (int)(y), (int)(2*side), (int)(2*side) );
}
public void setSide(int s)
{
side = s;
}
public int getSide()
{
return side;
}
public int getX()
{
return (int) x;
}
public int getY()
{
return (int) y;
}
public void setX(int xIn)
{
x = xIn;
}
public void setY(int setY)
{
y = setY;
}
}
Ship:
Kod:
package assignment1;
import java.awt.*;
public class Ship extends Square
{
public Ship()
{
super();
}
public void draw(Graphics g)
{
int side = super.getSide();
int x = super.getX();
int y = super.getY();
g.setColor(color);
g.fillRect( (int)(x), (int)(y), (int)(2*side), (int)(2*side) );
g.setColor(color);
g.fillRect( (int)(x), (int)(y - (2*side)), (int)(2*side), (int)(2*side) );
g.setColor(color);
g.fillRect( (int)(x - (2*side)), (int)(y - (2*side)), (int)(2*side), (int)(2*side) );
g.setColor(color);
g.fillRect( (int)(x + (2*side)), (int)(y - (2*side)), (int)(2*side), (int)(2*side) );
g.setColor(color);
g.fillRect( (int)(x), (int)(y - (4*side)), (int)(2*side), (int)(2*side) );
}
}
i FleetOfShips:
Kod:
package assignment1;
import java.awt.*;
public class FleetOfShips
{
Ship[] fleetMembers;
int total = 5;
FleetOfShips()
{
fleetMembers = new Ship[total];
for (int i = 0; i < total; i = i++)
{
fleetMembers[i] = new Ship();
fleetMembers[i].setX (i * 10);
fleetMembers[i].setY (i * 10);
}
}
public void draw(Graphics g)
{
for (int i = 0; i < total; i = i++)
{
fleetMembers[i].draw(g);
}
}
public void goSouth(int howFar)
{
for (int i = 0; i < total; i = i + 1)
{
fleetMembers[i].setY (fleetMembers[i].getY() + howFar);
}
}
}
Wszystkie 3 mi w BlueJ kompiluja bez problemow ale ten ostatni mi po prostu wywala applet.
Skad wiem ze ostatni jest problemem? Nasz nauczyciel dal nam ten kawalek kodu ktory pozwala nam "odpalic" kazda klase z osobna, wystarczy pozmieniac nazwy klas w kodzie (w tym wypadku to co wkleilem odnosi sie do "square"). Normalnie mi wyswietla tak jak ma wyswietlac "square" i "ship" ale "FleetOfShips" nie dziala.
Kod:
package assignment1;
import java.awt.event.*;
import java.applet.Applet;
import java.awt.*;
import javax.swing.*;
public class AnimateInTabSquare extends JApplet
implements ActionListener, MouseListener, MouseMotionListener
{
JPanel display;
JTabbedPane tabpane;
JEditorPane helpPane;
Square mySquare;
private int x;
private int y;
private Timer timer = new Timer(100,this);
public AnimateInTabSquare() // constructor
{
display = new JPanel()
{
public void paintComponent(Graphics g)
{
drawFrame(g);
}
};
//getContentPane().add(display);
}
public void init( )
{
display.addMouseListener(this);
display.addMouseMotionListener(this);
timer.setDelay(10);
timer.start();
mySquare = new Square();
tabpane = new JTabbedPane( );
helpPane = new JEditorPane();
// allow embedded html in your rendered text
helpPane.setContentType( "text/html" );
String helpText;
helpText = "<html><body>line 1 of help<br>";
helpText = helpText + "<em> another lne of help </em><br>";
helpText = helpText + "last line of help</body></html>";
helpPane.setText(helpText);
// add tabs
tabpane.addTab( "Game", display );
tabpane.addTab( "Help", helpPane );
// add tabbed pane to applet
add( tabpane, BorderLayout.CENTER);
}
public void drawFrame(Graphics g)
{
// to compute and draw the next frame in the animation.
g.setColor(Color.black); // fill the applet with a black background.
g.fillRect(0, 0, getSize().width, getSize().height);
// place here code that should happen every time that the timer makes the frame get re-drawn
// Ask the myFleet object to draw itself.
mySquare.draw(g);
} // end drawFrame()
// empty methods below must be here for mouseEventListener
public void mousePressed(MouseEvent evt) { }
public void mouseDragged(MouseEvent evt) { }
public void mouseReleased(MouseEvent evt) { }
public void mouseMoved(MouseEvent evt) { }
public void mouseEntered(MouseEvent evt) { }
public void mouseExited(MouseEvent evt) { }
public void mouseClicked(MouseEvent evt)
{
if (mySquare.getSide() == 5)
mySquare.setSide(50);
else
mySquare.setSide(5);
display.repaint();
}
public void actionPerformed(ActionEvent evt) // triggered by timer
{
//display.repaint();
}
}
Jak uzyje tego z "fleetofships" to applet po prostu sie wiesza i musze wylaczyc go ctrl+alt+del
Jedyna rzecz jaka potrzebuje to zeby wyswietlilo mi to "FleetOfShips" w applecie, bo musze porobic screeny dla mojego nauczyciela. Ten kod ktory mam byl robiony z PDL od nauczyciela ale nadal nie dziala mi.
@
Rocket Man
@
Cybuch
Zakładki