Forum: Uppdatering av fönster

Forum huvudsida -> Programmering -> Uppdatering av fönster

Sidor: 1

Till botten

Osito 22:15 - 19:e Mars 2006 | Post #1
Medlem
Inlägg: 32


Skicka PM
Har ett problem med ett program i java. Har ett intärntfönster som man infogar bilder i (kortfattat...). Problemet är att fönstret inte uppdaterar sig när man infogar bilden utan man måste "skaka" på det för att den skall visa sig. Vad är problemet och finns det någon "refresh" funktion/class man kan anropa som löser det hela?

Vore väldigt snäll om någon kunde hjälpa oss då detta är ett projektarbete som snart skall var inlämnat...

Här är hela programet (väldigt stor så det får inte plats i detta fönstret...) Ladda hem

//Björn

-------------------------
//Osito



Independence 22:35 - 19:e Mars 2006 | Post #2
Administratör
Inlägg: 1800


Skicka PM
,,r det swing eller awt?

-------------------------

Vi är riddarna som säger fiskbulle!





Osito 11:39 - 20:e Mars 2006 | Post #3
Medlem
Inlägg: 32


Skicka PM
Vi använder swing till stor del fast vissa inslag av awt, så det är lite blandat. Beror mest på att vi först lärde oss awt och sedan, själva, gick över till swing.

-------------------------
//Osito



Nissebosselasse 12:24 - 20:e Mars 2006 | Post #4
Medlem
Inlägg: 490


Skicka PM
Kan du inte bara anropa fönstrets/frame-klassens (länge sen jag programmerade i Java) Refresh, eller liknande? Eller Paint heter den kanske.

-------------------------
http://pushingcows.se
Gula Nallen



Independence 18:11 - 20:e Mars 2006 | Post #5
Administratör
Inlägg: 1800


Skicka PM
Verkar som paint, repaint eller update är rätt kommando. Finns mer att läsa här: http://java.sun.com/products/jfc/tsc/articles/painting/

-------------------------

Vi är riddarna som säger fiskbulle!





Osito 08:11 - 21:a Mars 2006 | Post #6
Medlem
Inlägg: 32


Skicka PM
Skall ta ett titt på det. Men tror det är hela fönstret som behövs uppdateras inte bra ikonerna. Så repaint kanske inte fungerar? (har för mig att det är för bilder...)

...terkommer när vi testat...

-------------------------
//Osito



Nissebosselasse 09:20 - 21:a Mars 2006 | Post #7
Medlem
Inlägg: 490


Skicka PM
Men fungerar inte paint-händelser i Java precis som i de flesta andra fönstersystem, dvs att händelsen skickas till fönstret, som tvingar alla kontroller som finns inuti det att ritas om, oavsett vad det är för filurer?

-------------------------
http://pushingcows.se
Gula Nallen



Osito 08:26 - 24:e Mars 2006 | Post #8
Medlem
Inlägg: 32


Skicka PM
Hur skiver man egentligen repaint sattsen (vilken skall användas vid swing, om jag fattat rätt)? Vi har testat runt bra mycker nu, utan resultat. Har börjat fundera i banorna att man har "tomma" bilder frånbörjan som sedan byts ut mot de man vill ha. Detta krånglade också....

Om jag har en JLabel med en IconImage med värdet s1 och sedan en variabel s1 som är en string (sök väg). Borde jag inte kunna ändra s1 då i action preform? Hur? Blir tokigt! Måste jag fortfarande använda repaint?

-------------------------
//Osito



Nissebosselasse 09:09 - 24:e Mars 2006 | Post #9
Medlem
Inlägg: 490


Skicka PM
Jag har ingen möjlighet att testa koden här (eller någon annanstans heller, kom jag på nu... Smiley ), men i main.java, precis i slutet av main-metoden, vad händer om du gör följande:

// Din kod
fonster.setVisible(true);

// Lägg till detta
fonster.repaint ();

Men jag tycker det är märkligt om man måste själv anropa det första gången...iofs kanske felet ligger någon annanstans.

----

Nu är jag kanske ute och cyklar, men funkar detta (samma ställe som ovan i samma fil):

// Din kod
fonster.setVisible(true);

// Lägg till detta
fonster.paintAll (fonster.getGraphics());



-------------------------
http://pushingcows.se
Gula Nallen

Senast redigerad 09:12 - 24:e Mars 2006


Osito 09:56 - 28:e Mars 2006 | Post #10
Medlem
Inlägg: 32


Skicka PM
Sista funktionen fungerade, dock fick jag lägga den där det skulle uppdateras (lat.java, actionPerformed, JPanel). Tackar för hjälpen!

Skulle behöva ett tips. Har en JPanel med tre komponenter. två skall ligga uppe och 1 där nere. BorderLayout har krånglat hittils. Grid blir bara konstig, så vad skall jag göra? En kombo?

-------------------------
//Osito



Nissebosselasse 10:35 - 28:e Mars 2006 | Post #11
Medlem
Inlägg: 490


Skicka PM
En kombo? Två snabba steg bak och sen fram+sparkknapp? Smiley

Hur ser koden ut för din BorderLayout?

-------------------------
http://pushingcows.se
Gula Nallen



Osito 21:31 - 28:e Mars 2006 | Post #12
Medlem
Inlägg: 32


Skicka PM
Ingen sådan kombo Smiley Menade att man skulle blanda några layouter, men jag löste det på enklaste sett. La in de två övre komponenterna på en JPanel och sedan la jag en 2 raders grid på huvud panelen. Blev allt dugligt Smiley

Nu börjar vi komma in på krångliga grejer. Nu skall vi kunna spara, öppna och skriva ut skiten. Spara/öppna är det som prioriteras först. Lite svårt att beskriva men vi har ett intärnfönster som har ett antal JPanels med textinmatnings rutor och en panel med infogade bilder. Hur spara jag detta lättas? Några tips eller bra idéer?!

-------------------------
//Osito



Nissebosselasse 09:47 - 30:e Mars 2006 | Post #13
Medlem
Inlägg: 490


Skicka PM
Vad är det ni ska spara ner; informationen i kontrollerna (texten i textinmatningsrutan), eller själva kontrollerna (deras positioner etc.)?

Tänk på att läsa in informationen från en fil på samma sätt som du sparade ner den. Själva formatet på informationen spelar sedan ingen egentligen roll, det räcker kanske med en textfil som ser ut som följande:

textruta_ett    Här är min lilla text i första rutan
textruta_två    Och texten i ruta två
textruta_tre    Jisses, här är det intressant text!

...där första ordet betecknar kontrollens namn, och resterande text på raden dess innehåll. Hur du läser in den här texten rent programmeringsmässigt är ju så klart upp till dig... Smiley
Finns det inte till och med en tokeniseringsklass inbyggd i Java, som du kan använda till det här? (Tokenisering = som delar upp text i mindre enheter enligt ett visst mönster).

-------------------------
http://pushingcows.se
Gula Nallen



Osito 10:14 - 30:e Mars 2006 | Post #14
Medlem
Inlägg: 32


Skicka PM
Det vi skall spara är det som matas in för att kunna öppna det igen i samma textruta. skall fixa en print screen på det hela. Får ta en sökning på tokenisering...

-------------------------
//Osito



Nissebosselasse 10:54 - 30:e Mars 2006 | Post #15
Medlem
Inlägg: 490


Skicka PM
Aha, okej, men då är det som jag beskrev lite i föregående post. Den informationen skulle man kunna läsa in på följande sätt:

1. Läs en rad från filen (sRad);

2. Finn första mellanslaget, eftersom: 1) första ordet är namnet på kontrollen, och 2) namnet inte får innehålla några mellanslag. Mellanslagspositionen blir int iHittat_mellanslag = sRad.indexOf(' ');

3. Kontrollens namn blir då sNamn = sRad.substring(0, iHittat_mellanslag);

4. Resterande text på raden är innehållet i textrutan: sInnehåll = sRad.substring(iHittat_mellanslag);

5. Finns kontrollen medelst namnet. Jag hittade ingen sökfunktion typ getComponent (string name), men det finns en getComponent(int index), dvs, du får loopa igenom alla komponenterna och jämföra namnen. Kanske:

for (int i=0; i<frame.getComponentCount(); ++i)
{
    if (frame.getComponent(i).getName().equals(sNamn)) {
        // Hittade kontrollen här, sätt egenskap
        frame.getComponent(i).setText (sInnehåll);
    }
}


6. Upprepa för varje rad i filen!

Någonting sådant. OBS! Koden är inte testad överhuvudtaget.

-------------------------
http://pushingcows.se
Gula Nallen



Osito 18:36 - 3:e April 2006 | Post #16
Medlem
Inlägg: 32


Skicka PM
Pratade lite med vår handledare och sa att vi skulle göra så här ungefär:
  1.  
  2. public class meny extends JFrame implements ActionListener, Externalizable{
  3. //Reader/Writer
  4. public void readExternal(ObjectInput file)throws IOException{}
  5. public void writeExternal(ObjectOutput file)throws IOException{}
  6. .....................
  7.  
  8. //Spara & -ppna
  9. public static void spara(Object obj, String namn){
  10. try{
  11. out.writeObject(obj);
  12. out.close();
  13. }
  14. catch(IOException ie){
  15. ie.printStackTrace();
  16. System.exit(1);
  17. }
  18. }
  19. public static Object oppna(String namn){
  20. Object obj = null;
  21. try{
  22. obj = in.readObject();
  23. in.close();
  24. }
  25. catch(IOException ie){
  26. ie.printStackTrace();
  27. System.exit(1);
  28. }
  29. ce.printStackTrace();
  30. System.exit(2);
  31. }
  32. return obj;
  33. }
  34. //Händelser
  35. public void actionPerformed(ActionEvent e){
  36. if(e.getSource() == arkivAlt[0] /*|| e.getSource() == B_nyttpass*/) {
  37. pass pass_fonster = new pass("Namnlös");
  38. pass_fonster.setVisible(true);
  39. add(pass_fonster);
  40. }
  41. //-ppna
  42. else if(e.getSource() == arkivAlt[1]) {
  43. oppnaDialog.show();
  44. if(oppnaDialog.getFile() != null){
  45. oppna(oppnaDialog.getDirectory() + oppnaDialog.getFile());
  46. }
  47. repaint();
  48. }
  49. //Spara
  50. else if(e.getSource() == arkivAlt[2]) {
  51. sparaDialog.show();
  52. if(sparaDialog.getFile() != null){
  53. spara(pass_fonster, sparaDialog.getDirectory() + sparaDialog.getFile());
  54. }
  55. }
  56. }
  57. }
  58.  


Problemet är att den inte hittar pass_fonster. Vad behöver jag göra för att programet skall hitta detta object (internt fönster där allt händer)?

-------------------------
//Osito



Nissebosselasse 21:55 - 3:e April 2006 | Post #17
Medlem
Inlägg: 490


Skicka PM
pass_fonster är en lokal variabel i den första if-satsen, i metoden actionPerformed, dvs, dess synlighet begränsas till den här lilla stumpen kod:

    if(e.getSource() == arkivAlt[0] /*|| e.getSource() == B_nyttpass*/) {
        pass pass_fonster = new pass("Namnlös");
        pass_fonster.setVisible(true);
        add(pass_fonster);    
    }

...eftersom du deklarerar den först däri. Konstigt att din handledare inte märkte det. Eller kör han pass_fonster som en global variabel? I så fall är koden fel i vilket fall som helst.

-------------------------
http://pushingcows.se
Gula Nallen



Osito 08:23 - 4:e April 2006 | Post #18
Medlem
Inlägg: 32


Skicka PM
Han har inte sett hela koden, han bara tipsade om Object funktionerna. Men hur skall jag lösa det? Lägga den utanför och bara lägga till den sedan? (har för mig det inte fungerar...)

-------------------------
//Osito



Sidor: 1

Forum huvudsida -> Programmering -> Uppdatering av fönster
Atom feed

Du får inte posta i den här tråden | Till toppen