Ezelőtt MVC-t csak webes oldalon volt alkalmam megismerni, ez alapján nekem abszolút érthető és logikus, amit csináltam, de attól félek, hogy valami nagy bakit követtem el, leegyszerűsített kód:
controller/Application.java:
package controller;
import org.eclipse.swt.widgets.Display;
public class Application {
public static Display display = new Display();
public static void main(String args[]) {
controller.MainWindow mainWindow = new controller.MainWindow("Valami");
mainWindow.run();
}
}
controller/MainWindow.java:
package controller;
import org.eclipse.swt.SWT;
// AbstractController-ben még nincs sokminden
public class MainWindow extends AbstractController {
private view.MainWindow mainWindow;
public MainWindow(String title) {
mainWindow = new view.MainWindow(title);
mainWindow.run(this);
}
public void control() {
mainWindow.ujUgyfelButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
ujUgyfelButtonClick(event);
}
});
// A többi Event ugyanígy regisztrálva
}
view/AbstractWindow.java:
package view;
import org.eclipse.swt.widgets.Display;
public abstract class AbstractWindow {
protected String title;
public AbstractWindow(String title) {
this.title = title;
}
// A többi osztály itt adja hozzá az SWT elemeket
protected abstract void createContents(Shell shell);
public void run(AbstractController controller) {
Shell shell = new Shell(Application.display);
shell.setText(title);
createContents(shell);
controller.control();
shell.open();
while (!shell.isDisposed()) {
if (!Application.display.readAndDispatch()) {
Application.display.sleep();
}
}
Application.display.dispose();
}
}
Ahol szerintem gáz van, az a public static Display display rész, de nem enged minden controllerben új Displayt létrehozni én viszont szeretném elkülöníteni a vezérlő részeket az ablak grafikus részétől. Tudom, hogy desktop MVC-nél ezt máshogy szokás, csak annyi kérdésem van, hogy nem futottam-e bele valami fatális hibába?
- 1411 megtekintés
Hozzászólások
Hahó!
,,Ahol szerintem gáz van, az a public static Display display rész, de nem enged minden controllerben új Displayt létrehozni én viszont szeretném elkülöníteni a vezérlő részeket az ablak grafikus részétől. ''
Valóban, a static kulcsszó miatt -- ami osztályszintű változót jelent, amelyet az osztály tárol -- a display változódból pontosan egy darab jön létre, függetlenül attól hogy mennyi Application példányt hoztál létre.
Ha minden egyes Application-hoz külön display értéket szeretnél, akkor a static kulcsszót el kell abból a sorból távolítanod, mert ekkor minden egyes Application-hoz létrejön a saját display érték.
G.
============================================
"Share what you know. Learn what you don't."
- A hozzászóláshoz be kell jelentkezni
Abból csak egyet akarok, egyébként kiírja, hogy multiple displays not implemented.
- A hozzászóláshoz be kell jelentkezni
A Displaynak van egy statikus getCurrent() metodusa, amivel az aktualis szalhoz tartozo peldanyt el tudod kerni. Nezd meg a javadocot.
- A hozzászóláshoz be kell jelentkezni
Köszönöm, ez kellett :)
- A hozzászóláshoz be kell jelentkezni