andrea
24-07-2007, 09:47
Stavo provando a fare un programmino di esercizio, ma credo di non aver ben capito una cosa sulle classi interne. Da una classe interna è possibile richiamare un metodo di un'altra classe?
Avevo fatto questi frammenti di codice:
public class BounceFrame extends JFrame {
public BounceFrame() {
setTitle("Bounce Test");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
panel = new BouncePanel();
add(panel,BorderLayout.CENTER);
bpanel = new ButtonPanel();
add(bpanel,BorderLayout.SOUTH);
}
public void addBall() {
try {
Ball ball = new Ball();
panel.add(ball);
for (int i = 1; i <= STEPS; i++) {
ball.move(panel.getBounds());
panel.paint(panel.getGraphics());
Thread.sleep(DELAY);
}
}
catch (InterruptedException e) {
}
}
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;
private static final int STEPS=1000;
private static final int DELAY=3;
private BouncePanel panel;
private ButtonPanel bpanel;
}
e quest'altro dove richiamavo il metodo addBall all'interno di una classe interna:
public class ButtonPanel extends JPanel {
public ButtonPanel() {
JButton startButton = new JButton("Start");
JButton closeButton = new JButton("Close");
add(startButton);
add(closeButton);
ButtonStartAction startAction = new ButtonStartAction();
ButtonCloseAction closeAction = new ButtonCloseAction();
startButton.addActionListener(startAction);
closeButton.addActionListener(closeAction);
}
private class ButtonStartAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
addBall();
}
}
private class ButtonCloseAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
}
ma appunto il programma non funziona dandomi "The method addBall() is undefined for the type ButtonPanel.ButtonStartAction. Quindi questa cosa non si puo' fare?
Avevo fatto questi frammenti di codice:
public class BounceFrame extends JFrame {
public BounceFrame() {
setTitle("Bounce Test");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
panel = new BouncePanel();
add(panel,BorderLayout.CENTER);
bpanel = new ButtonPanel();
add(bpanel,BorderLayout.SOUTH);
}
public void addBall() {
try {
Ball ball = new Ball();
panel.add(ball);
for (int i = 1; i <= STEPS; i++) {
ball.move(panel.getBounds());
panel.paint(panel.getGraphics());
Thread.sleep(DELAY);
}
}
catch (InterruptedException e) {
}
}
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;
private static final int STEPS=1000;
private static final int DELAY=3;
private BouncePanel panel;
private ButtonPanel bpanel;
}
e quest'altro dove richiamavo il metodo addBall all'interno di una classe interna:
public class ButtonPanel extends JPanel {
public ButtonPanel() {
JButton startButton = new JButton("Start");
JButton closeButton = new JButton("Close");
add(startButton);
add(closeButton);
ButtonStartAction startAction = new ButtonStartAction();
ButtonCloseAction closeAction = new ButtonCloseAction();
startButton.addActionListener(startAction);
closeButton.addActionListener(closeAction);
}
private class ButtonStartAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
addBall();
}
}
private class ButtonCloseAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
}
ma appunto il programma non funziona dandomi "The method addBall() is undefined for the type ButtonPanel.ButtonStartAction. Quindi questa cosa non si puo' fare?