Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  [java]Swing ja MVC märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
lehm2
Kreisi kasutaja


liitunud: 19.09.2004




sõnum 17.09.2008 21:39:05 [java]Swing ja MVC vasta tsitaadiga

Olen nüüd siis tegelenud natukest aega Swing API-ga ja võin öelda, et suurema programmi kohalt võib koodi haldamine ja uuenduste sisseseadmine raskeks muutuda. Selleks tuligi meelde veebimaailmast, selline tore pattern nagu seda on MVC, kuid ühtegi korraliku tutoriali pole ma leidnud. Olen lugenud küll mõningaid, kuid MVC mustriga kehtib reegel, et ilma ühe klassita peaks toimima ka teine, et kasutatud on palju sellist value pass by parameter. Näiteks controller klassi, loomisel pannakse parameetriks View class. Loodan, et väga segaseks see asi siin ei läinud, kuid arvatavasti läks.

Mõneski artiklis oli toodud M V C vaheliseks suhtlemiseks observer pattern. Siiski on see teema, kus minu jaoks Swing-ga töötades palju segadust.

_________________
Piilu siia, progreja!
Vajad abi Node.JS-ga ?
Võta ühendust !
Kommentaarid: 15 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
axeon
HV vaatleja
axeon

liitunud: 09.05.2003




sõnum 18.09.2008 10:27:58 vasta tsitaadiga

Võib-olla Springi RCP

Swingi projektid, mis kasutavad ära Springi raamistiku, kõlab üsna hästi.
Ise kasutan veebirakenduste treimisel Springi juba aastaid. Springil ka oma hästitoimiv MVC lahendus olemas.
Kommentaarid: 6 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 6
tagasi üles
vaata kasutaja infot saada privaatsõnum
lehm2
Kreisi kasutaja


liitunud: 19.09.2004




sõnum 18.09.2008 11:40:29 vasta tsitaadiga

Tundub huvitav projekt uurin kindlasti lähemalt, kuid millegi pärast Springi kodulehel saan igalt lingilt errori. Kas teil on sama või asi ainult minul? An error has been encountered in accessing this page. icon_rolleyes.gif
_________________
Piilu siia, progreja!
Vajad abi Node.JS-ga ?
Võta ühendust !
Kommentaarid: 15 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
axeon
HV vaatleja
axeon

liitunud: 09.05.2003




sõnum 18.09.2008 12:56:38 vasta tsitaadiga

http://www.springframework.org/ ju oli mingi ajutine probleem, hetkel nagu töötab
Kommentaarid: 6 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 6
tagasi üles
vaata kasutaja infot saada privaatsõnum
lehm2
Kreisi kasutaja


liitunud: 19.09.2004




sõnum 19.09.2008 21:57:53 vasta tsitaadiga

Põhimõtteliselt leidsin ühe frameworki välise kasutamise võimaluse ka, kuid paistab et koodi tuleb kohe hulganisti juurde kirjutada.
http://java.sun.com/developer/technicalArticles/javase/mvc/

Üritasin ka valmistada mingi näite, MVC põhjal.

Model:

java:
  1.  
  2. package myTemperatureExample;
  3.  
  4. import java.util.Observable;
  5.  
  6. public class Temperature extends Observable {
  7.  
  8.         private int temp;
  9.  
  10.         public Temperature() {
  11.                 this.temp = 0;
  12.         }
  13.  
  14.         public Temperature(int temp) {
  15.                 this.temp = temp;
  16.         }
  17.        
  18.         public int getTemp() {
  19.                 return temp;
  20.         }
  21.  
  22.         public void setTemp(int temp) {
  23.                 this.temp = temp;
  24.                 setChanged();
  25.                 notifyObservers();
  26.         }
  27.        
  28. }
  29.  
  30.  


View ja Controller, tegelikult oleks vaja Appi loomine eraldi faili panna ja View tagastaks ainult JPaneli. Probleeme võib tekkida siis, kui on vaja rakendada actionlistenern-na vähe pikemat koodi või on vajadus teisse faili viia. Mis arvate?
java:
  1.  
  2. package myTemperatureExample;
  3.  
  4. import java.awt.BorderLayout;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.util.Observable;
  8. import java.util.Observer;
  9.  
  10. import javax.swing.JButton;
  11. import javax.swing.JFrame;
  12. import javax.swing.JPanel;
  13. import javax.swing.JTextField;
  14.  
  15.  
  16. public class TemperatureGUI extends JFrame implements Observer {
  17.  
  18.         JButton addButton;
  19.         JButton removeButton;
  20.         JTextField textfield;
  21.         Temperature t;
  22.        
  23.         public TemperatureGUI() {
  24.                 Controller c = new Controller();
  25.                
  26.                 JPanel mainPanel = new JPanel(new BorderLayout());
  27.                
  28.                 addButton = new JButton("Add");
  29.                 addButton.setActionCommand("ADD");
  30.                 addButton.addActionListener(c);
  31.                
  32.                 removeButton = new JButton("Remove");
  33.                 removeButton.setActionCommand("REMOVE");
  34.                 removeButton.addActionListener(c);
  35.                
  36.                 textfield = new JTextField(10);
  37.                
  38.                 t = new Temperature();
  39.                 t.addObserver(this);
  40.                 t.setTemp(38);
  41.                
  42.                 mainPanel.add(addButton, BorderLayout.NORTH);
  43.                 mainPanel.add(removeButton, BorderLayout.SOUTH);
  44.                 mainPanel.add(textfield, BorderLayout.CENTER);
  45.                
  46.                 getContentPane().add(mainPanel);
  47.                 setSize(150, 150);
  48.         }
  49.        
  50.         @Override
  51.         public void update(Observable ob, Object obj) {
  52.                 if (ob instanceof Temperature) {
  53.                         textfield.setText(Integer.toString(t.getTemp()));
  54.                 }
  55.         }
  56.        
  57.         private class Controller implements ActionListener {
  58.                
  59.                 @Override
  60.                 public void actionPerformed(ActionEvent e) {
  61.                         String command = e.getActionCommand();
  62.                         int currentTemp = t.getTemp();
  63.                        
  64.                         if (command == "ADD") {
  65.                                 currentTemp++;
  66.                                 t.setTemp(currentTemp);
  67.                                
  68.                         } else if (command == "REMOVE") {
  69.                                 currentTemp--;
  70.                                 t.setTemp(currentTemp);
  71.                         }
  72.                         System.out.println("Temp set to:" + t.getTemp());
  73.                 }
  74.         }
  75.        
  76.         public static void main(String[] args) {
  77.                 javax.swing.SwingUtilities.invokeLater(new Runnable() {
  78.                         @Override
  79.                         public void run() {
  80.                                 new TemperatureGUI().setVisible(true);
  81.                         }
  82.                 });
  83.         }
  84.  
  85. }
  86.  
  87.  
icon_rolleyes.gif
_________________
Piilu siia, progreja!
Vajad abi Node.JS-ga ?
Võta ühendust !
Kommentaarid: 15 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  [java]Swing ja MVC
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.