Hoi, ik ben een student informatica, en we hebben een opdracht gekregen om een foto applicatie te maken. Het doel is om te leren hoe we design patterns toe moeten passen, daarom eerst even een overzicht van de patterns die in dit programma verwerkt zitten:
Proxy
Model-View-Controller
CommandProcessor
Singleton (De commandprocessor is dat)
Decorator (Om images te resizen tot thumbnails)
ViewHandler (Heb ik nog niet in mijn code gezet)
Als je de applicatie opstart heb je bovenin een splitpane, met links een BrowserView, en rechts een PhotoView. De BrowserView bevat een scrollpane met daarin een JTree. De JTree bevat albums, en albums bevatten foto's. Onderin is er nog een ThumbnailView, met thumbnails erin, maar deze hebben geen invloed op de PhotoView.
De PhotoView was toen het nog werkte een panel, met daarin een foto. Om er voor te zorgen dat bij grote foto's je niet maar een klein stukje ziet heb ik dat panel toen in een scrollpane gezet. Dit werkte erg buggy, omdat de images maar half, of soms helemaal niet in beeld kwamen. Nu heb ik daar dus ook nog een splitpane omheen gezet en nu werkt het helemaal niet meer. (De constructie is dus: splitpane, met daarin: scrollpane, met daarin: panel, met daarin: foto).
Op dit moment geef ik de scrollpane de preferredsize van de foto mee, en als ik dat doe zie ik dat de scrollpane wel de juist dimensies mee krijgt maar dat hij er gewoon geen foto in zet. Als ik de scrollpane een andere preferredsize mee geef tekent hij ook niks in beeld, en krijg ik ook geen scrollbalken te zien.
Als ik debug zijn de variabelen voor zover ik het kan zien wel allemaal goed, dus ik denk toch echt dat er iets in de layout niet helemaal lekker zit. Zou iemand me kunnen helpen met de oplossing? Alles wat ik op internet/GoT vind past volgens mij totaal niet in hoe mijn programma tot nu toe geprogrammeerd is
Alvast mijn eeuwige dank!
Om het te verduidelijken zet ik hier de code van: PhotoView/PhotoController/AlbumModel.
PhotoView
PhotoController
AlbumModel:
De splitpane staat hier niet tussen, die word in de klasse Client aangemaakt, en daar wordt Photoview.get_scrollPane() aan toegevoegd. Mocht je meer klassen willen bekijken qua code dan kan dit, geef het even aan en dan voeg ik die code nog toe. Nogmaals mij dank
Proxy
Model-View-Controller
CommandProcessor
Singleton (De commandprocessor is dat)
Decorator (Om images te resizen tot thumbnails)
ViewHandler (Heb ik nog niet in mijn code gezet)
Als je de applicatie opstart heb je bovenin een splitpane, met links een BrowserView, en rechts een PhotoView. De BrowserView bevat een scrollpane met daarin een JTree. De JTree bevat albums, en albums bevatten foto's. Onderin is er nog een ThumbnailView, met thumbnails erin, maar deze hebben geen invloed op de PhotoView.
De PhotoView was toen het nog werkte een panel, met daarin een foto. Om er voor te zorgen dat bij grote foto's je niet maar een klein stukje ziet heb ik dat panel toen in een scrollpane gezet. Dit werkte erg buggy, omdat de images maar half, of soms helemaal niet in beeld kwamen. Nu heb ik daar dus ook nog een splitpane omheen gezet en nu werkt het helemaal niet meer. (De constructie is dus: splitpane, met daarin: scrollpane, met daarin: panel, met daarin: foto).
Op dit moment geef ik de scrollpane de preferredsize van de foto mee, en als ik dat doe zie ik dat de scrollpane wel de juist dimensies mee krijgt maar dat hij er gewoon geen foto in zet. Als ik de scrollpane een andere preferredsize mee geef tekent hij ook niks in beeld, en krijg ik ook geen scrollbalken te zien.
Als ik debug zijn de variabelen voor zover ik het kan zien wel allemaal goed, dus ik denk toch echt dat er iets in de layout niet helemaal lekker zit. Zou iemand me kunnen helpen met de oplossing? Alles wat ik op internet/GoT vind past volgens mij totaal niet in hoe mijn programma tot nu toe geprogrammeerd is
Om het te verduidelijken zet ik hier de code van: PhotoView/PhotoController/AlbumModel.
PhotoView
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| public class PhotoView extends JPanel implements Observer { private static final long serialVersionUID = -4977003466252698238L; private PhotoController _myController = null; private PhotoProxy _photo1 = null; private AlbumModel _model = null; private JScrollPane _scrollPane; public PhotoView(){ this.setLayout(new FlowLayout()); _photo1 = new PhotoProxy(""); this.add(_photo1); this.setPreferredSize(_photo1.getPreferredSize()); _scrollPane = new JScrollPane(); _scrollPane.getViewport().setView(this); setVisible(true); _scrollPane.setPreferredSize(_photo1.getPreferredSize()); } public void initialize(AlbumModel m){ m.attach(this); _model = m; _myController = new PhotoController(); _myController.initialize(m,this); } public void update() { _photo1 = new PhotoProxy(_model.getCurrentlySelected().get_path()); this.add(_photo1); this.setPreferredSize(_photo1.getPreferredSize()); _scrollPane.removeAll(); _scrollPane.setPreferredSize(_photo1.getPreferredSize()); _scrollPane.getViewport().setView(this); setVisible(true); revalidate(); } public PhotoProxy getPhoto1() { return _photo1; } public JScrollPane get_scrollPane() { return _scrollPane; } } |
PhotoController
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| public class PhotoController implements Observer, ActionListener { AlbumModel _myModel = null; PhotoView _myView = null; public void initialize(AlbumModel m, PhotoView v){ this._myModel = m; this._myView = v; m.attach(this); } public void update() { // TODO Auto-generated method stub } public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub } } |
AlbumModel:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| public class AlbumModel { private ArrayList _observers = new ArrayList(); private Item _currentlySelected; private DefaultMutableTreeNode _currentAlbum; public void attach(Observer o){ _observers.add(o); } public void detach(Observer o){ _observers.remove(o); } /** * De aNotify() methode update alle _observers in de arraylist. */ public void aNotify(){ Iterator itr = _observers.iterator(); while(itr.hasNext()){ Observer a = (Observer) itr.next(); a.update(); } } public void setCurrentlySelected(Item item) { _currentlySelected = item; aNotify(); } public Item getCurrentlySelected() { return _currentlySelected; } public void setCurrentAlbum(DefaultMutableTreeNode s){ _currentAlbum = s; System.out.println("Huidig album:"+_currentAlbum.toString()); } public DefaultMutableTreeNode getCurrentAlbum(){ return _currentAlbum; } } |
De splitpane staat hier niet tussen, die word in de klasse Client aangemaakt, en daar wordt Photoview.get_scrollPane() aan toegevoegd. Mocht je meer klassen willen bekijken qua code dan kan dit, geef het even aan en dan voeg ik die code nog toe. Nogmaals mij dank
I think there is a world market for maybe five computers. - Thomas Watson (1874-1956), Directeur van IBM (1943)