Ich lerne objektorientierte Programmierung aus einem Buch. Ich bin ziemlich weit gekommen, aber jetzt stecke ich fest. Ist wExec
wieder selbst ausgeführt? Ich bin mir nicht sicher, ob das überhaupt möglich ist. Kann das jemand für mich klären? Wenn ich den Knopf "Fertig" drücke und die Ausführung des Referenzobjekts verlasse, bin ich so verwirrt. Hier ist der Code von jeder Klasse:Was passiert mit dem Ereignisobjekt? Wird Code erneut ausgeführt?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RunApp {
public static void main(String[] args) {
MainApp app = new MainApp("hello world");
app.showApp();
}
}
class MainApp extends MmvcApp {
WmvcButton btnDone;
WmvcButton btnExit;
public MainApp(String title) {
super(title);
btnDone = new WmvcButton("Done", new WmvcExecutor() {
public void execute(ActionEvent event) {
System.out.println("done");
System.out.println("test 2");
}
});
btnExit = new WmvcButton("Exit", btnDone.getExecutor());
}
}
abstract class MmvcApp {
private static JFrame frame;
private static JPanel panel;
private static MmvcApp singletonApp = null;
public MmvcApp(String frameText) {
singletonApp = this;
initializeApp(frameText);
}
public void initializeApp(String frameText) {
frame = new JFrame(frameText);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
panel.setPreferredSize(new Dimension(400, 300));
frame.add(panel, BorderLayout.CENTER);
}
public static JFrame getFrame() {
return frame;
}
public static JPanel getPanel() {
return panel;
}
public static MmvcApp getApp() {
return singletonApp;
}
public void showApp() {
frame.pack();
frame.setVisible(true);
}
}
class WmvcButton extends WmvcController {
private JButton myButton;
public WmvcButton(String compText, WmvcExecutor wExec) {
super((JComponent) new JButton(), wExec);
myButton = (JButton) myComponent;
myButton.setText(compText);
myButton.addActionListener(this);
MmvcApp.getPanel().add(myButton);
}
}
class WmvcController implements ActionListener {
public JComponent myComponent;
private WmvcExecutor wExec;
public WmvcController(JComponent component, WmvcExecutor wExec) {
myComponent = component;
this.wExec = wExec;
}
public WmvcExecutor getExecutor() {
return wExec;
}
public void actionPerformed(ActionEvent event) {
if (wExec != null) {
wExec.execute(event);
System.out.println("test 1");
} else
System.out.println("not working ");
}
}
class WmvcExecutor {
public void execute(ActionEvent event) {
}
}
Es tut mir leid - was hast du genau verwechselt? Was ist deine genaue Frage? –
Nebenbei möchten Sie lernen und verwenden [Java Namenskonventionen] (http://en.wikipedia.org/wiki/Naming_convention_ (Programmierung) #Java). Variablennamen sollten alle mit einem niedrigeren Buchstaben beginnen, während Klassennamen mit einem Großbuchstaben beginnen. Wenn wir dies lernen und diesem Beispiel folgen, können wir Ihren Code besser verstehen und den Code anderer besser verstehen. –
'new wmvcExecutor() {...}' definiert eine neue Art von ** Klasse ** (speziell eine [anonyme Klasse] (https://docs.oracle.com/javase/tutorial/java/javaOO/anonymyclasses) .html)). –