Avatar billede human Nybegynder
06. oktober 2005 - 09:03 Der er 28 kommentarer og
1 løsning

Windows program med flag der blafrer

HEysa

Jeg står og skal bruge koden til et program, med et flag hvor det blafrer.. Altså et meget meget simpelt java program :)

Farver osv. skal der ikke tænkes på.

Burde ikke tage mere end 2 min. for jer der har styr på det ;)

På forhånd tak!
Avatar billede human Nybegynder
06. oktober 2005 - 09:19 #1
Det er forresten også remelig vigtigt at der er en god forklaring af koden så jeg forstår det. På newbie sprog :)
Avatar billede majsmarken Nybegynder
06. oktober 2005 - 09:19 #2
Jeg ved godt at det ikke er en 'kode' men
http://www.3dflags.com/html/en/icon/classic/d/denma_2fawm.html ???
Avatar billede human Nybegynder
06. oktober 2005 - 09:21 #3
Du spørger altså om det er noget i den stil jeg leder efter?
Ja det er det, ligenøjagtig. Men det skal laves som en windows program :)

Sådan et  lille vindue med et flag som står og blafrer.
Avatar billede majsmarken Nybegynder
06. oktober 2005 - 09:28 #4
Om så ikke så som 'inspiration' ...

Good Luck...
Avatar billede mikkelbm Nybegynder
06. oktober 2005 - 16:16 #5
Det kan gøres meget simpelt:

import java.awt.*;
import javax.swing.*;

public class Flags extends JFrame
{
    private ImageIcon flag;
   
    public Flags()
    {
        flag = new ImageIcon ("danskflag.gif");
        this.getContentPane().add(new JLabel(flag), BorderLayout.CENTER);
    setSize (400, 400);
    }
   
    public static void main (String[] args)
    {
        new Flags().setVisible (true);
    }
}


"danskeflag.gif" er bare et flag jeg har hentet i gif-format.

Hvis du selv vil til at tegne flagene, så bliver det straks meget mere komplekst.
Avatar billede mikkelbm Nybegynder
06. oktober 2005 - 16:17 #6
Spørg endelig hvis du er i tvivl.
Avatar billede mikkelbm Nybegynder
06. oktober 2005 - 16:28 #7
Og et lidt større eksempel:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Flags extends JFrame
{
    private ImageIcon[] flags = new ImageIcon[3];
    private JLabel currentFlag = new JLabel();
    private int currentFlagNumber = 1;
   
    public Flags()
    {
    flags[0] = new ImageIcon ("danskflag.gif");
        flags[1] = new ImageIcon ("tyskflag.gif");
    flags[2] = new ImageIcon ("italienskflag.gif");

    JButton button = new JButton ("Skift");
        button.addActionListener (new ActionListener()
        {
            public void actionPerformed (ActionEvent e)
            {
                changeFlag();
            }
        });

        currentFlag.setHorizontalAlignment(JLabel.CENTER);
    currentFlag.setIcon (flags[0]);
        this.getContentPane().add(currentFlag, BorderLayout.CENTER);
    this.getContentPane().add(button, BorderLayout.SOUTH);
    setSize (400, 400);
    }
   
    private void changeFlag ()
    {
        int flag = currentFlagNumber % 3;
        currentFlag.setIcon (flags[flag]);
        currentFlagNumber++;
    }
   
    public static void main (String[] args)
    {
        new Flags().setVisible (true);
    }
}
Avatar billede human Nybegynder
06. oktober 2005 - 16:56 #8
Det jeg ledte efter var et simpelt kodeeksempel på hvordan man arbejder med grafik i Java, altså uden at bruge nogen billeder som sådan. Men kan rigtig godt lide dit eksempel.

Hvis du kan sætte nogle grundige kommentarer på din kode som forklarer den, så er der poing til dig :) Jeg skal ikke bruge programmer til noget som sådan, men så jeg kan lære noget fra et eksempel, derfor det skulle være simpelt ;)

Dit eksempel kan fint compiles i det nyeste eksempel af netbeans ik?
Avatar billede human Nybegynder
06. oktober 2005 - 18:49 #9
Ja, det virker jo perfekt, begge eksempler :) Takker!

Men vil gerne se forklaringer på koden hvis du har tid til det.
Avatar billede mikkelbm Nybegynder
06. oktober 2005 - 21:40 #10
Så fik jeg tid til lidt kommentar:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Flags extends JFrame
{
    private ImageIcon[] flags = new ImageIcon[3]; // Opretter et array med plads til 3 billeder (ImageIcon)
    private JLabel currentFlag = new JLabel(); // For at vise et ImageIcon, skal der være en container til det - der bruger jeg en JLabel
    private int currentFlagNumber = 1; // Holder styr på hvilket flag der skal vises
   
    public Flags()
    {
        flags[0] = new ImageIcon ("danskflag.gif"); // Sætter element nr. 0 til at være det givne billede
        flags[1] = new ImageIcon ("tyskflag.gif"); // Det samme med element nr. 1
        flags[2] = new ImageIcon ("italienskflag.gif"); // Det samme med element nr. 2

        JButton button = new JButton ("Skift"); // Knappen til at skifte flag
        button.addActionListener (new ActionListener() // Tilføjer en listener der lytter på tryk på knappen
        {
            public void actionPerformed (ActionEvent e)
            {
                changeFlag(); // Når der trykkes kaldes denne metode
            }
        });
 
        // Nedenstående tilføjer og sætter størrelser på de elementer der skal vises
        currentFlag.setHorizontalAlignment(JLabel.CENTER);
        currentFlag.setIcon (flags[0]); // Starter med flag nr. 1 (0)
        this.getContentPane().add(currentFlag, BorderLayout.CENTER);
        this.getContentPane().add(button, BorderLayout.SOUTH);
        setSize (400, 400);
    }
   
    private void changeFlag ()
    {
        int flag = currentFlagNumber % 3; // % = modulus = finder restværdien af en division f.eks: (6 % 3 = 0) (5 % 3 = 2)
        currentFlag.setIcon (flags[flag]); // Sætter det givne ImageIcon på vores container (JLabel)
        currentFlagNumber++; // Og fortæller at næste gang der trykke på knappen, så skal vi tage det næste billede
    }
   
    public static void main (String[] args)
    {
        new Flags().setVisible (true);
    }
}


Har du flere spørgsmål - spørger du bare...
Avatar billede mikkelbm Nybegynder
06. oktober 2005 - 22:06 #11
Vil du selv igang med at lege med grafik i Java, så er det en større omgang. Men et godt sted at starte ville være her:

http://java.sun.com/docs/books/tutorial/2d/
Avatar billede human Nybegynder
06. oktober 2005 - 22:45 #12
Jeg takker mange gange :)

Jeg har et spg mere. Jeg har sat koden ind i netbeans og compiled det, det virker også som det skal. Men kan man gøre så det bare et en .exe fil som man skal klikke på så åbner programmet?
Avatar billede mikkelbm Nybegynder
06. oktober 2005 - 22:49 #13
I Java laver man normalt ikke .exe filer da det strider mod platformsuafhængigheden.

Derimod laver man en jar fil, som så fungerer som en exe fil, man kan dobbeltklikke på. Ta' eventuelt et kig her for inspiration:

http://java.sun.com/docs/books/tutorial/jar/
Avatar billede mikkelbm Nybegynder
06. oktober 2005 - 23:05 #14
Og hvis jeg lige skal gi' et hurtigt eksempel på at lave en jar fil:

1)
flags[0] = new ImageIcon ("danskflag.gif");
flags[1] = new ImageIcon ("tyskflag.gif");
flags[2] = new ImageIcon ("italienskflag.gif");

Skal lige ændres til:

flags[0] = new ImageIcon (getClass().getResource("danskflag.gif"));
flags[1] = new ImageIcon (getClass().getResource("tyskflag.gif"));
flags[2] = new ImageIcon (getClass().getResource("italienskflag.gif"));

Da der er forskel på om man loader et billede fra en jar fil eller ej.

2)
Lav en fil med følgende indhold:

Manifest-Version: 1.0
Main-Class: Flags

(husk at der skal være linjeskift efter sidste linje)

Og gem filen i den mappe hvor dit program ligger med navnet: manifest.mf


3)
Gå ud i kommandoprompt - find frem til den mappe hvori dit program ligger.

Skriv:

jar -cvmf manifest.mf Flags.jar *.* (og tryk enter)

Nu bliver der genereret en fil der hedder Flags.jar og den burde du kunne dobbeltklikke på og dit program starter. Forudsat at java er rigtigt sat op på din maskine.
Avatar billede human Nybegynder
06. oktober 2005 - 23:47 #15
Efter at have erstattet de 3 linier med de nye får jeg denne fejl:

compile:
run:
Exception in thread "main" java.lang.NullPointerException
        at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
        at Flags.<init>(Flags.java:14)
        at Flags.main(Flags.java:50)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)
Avatar billede mikkelbm Nybegynder
06. oktober 2005 - 23:51 #16
Ja, du skal kun bruge den måde at gøre det på, når du vil pakke det ind i en jar fil. Ellers skal du beholde de gamle linjer.
Avatar billede human Nybegynder
07. oktober 2005 - 00:01 #17
Okay, jeg siger mange tak for hjælpen :) Du har været en stor hjælp!
Avatar billede human Nybegynder
07. oktober 2005 - 00:30 #18
Hmm.. hvis jeg går ind hvor jeg har lagt mit program. I mit tilfælde har jeg kaldt mappen flags/ der har jeg langt min minifest.mf

skriver:
jar -cvmf manifest.mf Flags.jar *.*

siger den kommandoen ikke findes.

Går jeg ind i en mappe som hedder dist som NB selv har oprettet, ligger der en fil som hedder Flags.jar, men dobbelt klikker jeg på den sker der ingenting. Hvordan kan det være?

hva gør jeg forkert?
Avatar billede mikkelbm Nybegynder
07. oktober 2005 - 00:53 #19
Hmm.. Nu kender jeg ikke lige NetBeans og den struktur den laver mht mapper. Og det kan faktisk også godt være du kan lave en jar fil igennem NetBeans, så du ikke behøver gå igennem kommandoprompt.

En jarfil kan ses som værende mere eller mindre det samme som en zipfil. Derfor kan du også åbne den med f.eks. winrar og se hvad der ligger indeni. De ting der som minimum skal ligge der er:

Flags$1.class
Flags.class
manifest.mf
danskflag.gif
tyskflag.gif
italienskflag.gif

Og så synes jeg det lyder underligt, at den har oprettet en jarfil, men skriver at kommandoen er ugyldig.

Hvad sker der hvis du i kommandoprompt skriver: java -jar Flags.jar
Når du står under samme mappe som Flags.jar ligger i?


Hvis ikke den jarfil indeholder de listede filer er den ikke korrekt.

Det kan også godt være du skal angive sti til der hvor du har installeret java.

Eksempel fra min kommandoprompt:

E:\Dokumenter\Programmering\Diverse\Eksperten - kode\Flags>C:\Programmer\Java\jdk1.5.0_04\bin\jar -cvmf manifest.mf Flags.jar *.*
added manifest
adding: Flags$1.class(in = 476) (out= 336)(deflated 29%)
adding: Flags.class(in = 1419) (out= 866)(deflated 38%)
adding: Flags.java(in = 1217) (out= 484)(deflated 60%)
adding: manifest.mf(in = 42) (out= 44)(deflated -4%)


Altså; Det er denne linje jeg skriver for at lave jarfilen:

C:\Programmer\Java\jdk1.5.0_04\bin\jar -cvmf manifest.mf Flags.jar *.*

Og den skal så rettes til, så den peger på det sted du har installeret java.
Avatar billede mikkelbm Nybegynder
07. oktober 2005 - 00:55 #20
Og de filer der ligger i min mappe er:

Flags$1.class
Flags.class
Flags.java
manifest.mf
danskflag.gif
tyskflag.gif
italienskflag.gif
Avatar billede mikkelbm Nybegynder
07. oktober 2005 - 01:06 #21
Og lige en slutnote inden jeg går til ro:

Der er ingen garanti for at din fil kan åbnes ved at dobbeltklikke. Det afhænger af hvordan Java er sat op på din maskine.

Men du kan i hvert fald åbne den via kommandoprompt ved at skrive:

java -cp . -jar Flags.jar

Eller:

java -jar Flags.jar

(Forudsat at den er lavet rigtigt :))
Avatar billede human Nybegynder
07. oktober 2005 - 14:50 #22
Jeg udførte denne:
E:\Programmering\Java\Flags\test>e:\programmer\Java\jdk1.5.0_05\bin\jar -cvmf ma
nifest.mf Flags.jar *.*

dette kom frem:
adding: cubanskflag.gif(in = 50642) (out= 50122)(deflated 1%)
adding: danskflag.gif(in = 47160) (out= 46636)(deflated 1%)
adding: engelskflag.gif(in = 44648) (out= 44246)(deflated 0%)
adding: Flags$1.class(in = 597) (out= 388)(deflated 35%)
adding: Flags.class(in = 1817) (out= 1024)(deflated 43%)
adding: Flags.java(in = 2366) (out= 965)(deflated 59%)
adding: manifest.mf(in = 40) (out= 42)(deflated -5%)

YAY! Så er det vist som det skal være ikke? og flags.jar indeholder de filer som du sagde den skulle.

Gruden til jeg havde nogle problemer med det er, at netbeans har spredt alle disse filer rundt i en hulens masser mapper jeg skulle rundt at finde. Det gav lidt problemer men fik dem samlet.

dobblet klikker jeg på flags.jar siger den:
Failed to load Main-Class manifest attribute from E:\programmering\java\flags\test\Flags.jar.

Du nævnte at java skulle være sat rigtigt op for at det virkede korrekt ikke? Det ved jeg faktisk ikke om det er, jeg har bare hentet en bundle med netbeans og J2SE og installeret det :)

Du siger du ikke bruger netbeans, må man hører hvad du bruger, som måske er bedre end netbeans?
Avatar billede human Nybegynder
07. oktober 2005 - 15:38 #23
Forsøger jeg at åbne den ved at skrive:
java -cp . -jar Flags.jar
eller
java -jar Flags.jar

Siger den:
Failed to load Main-Class manifest attribute from
flags.jar

MIn manifest fil indeholder:
Manifest-Version: 1.0
Main-Class: Flags
Avatar billede mikkelbm Nybegynder
07. oktober 2005 - 16:47 #24
Og du har husket et linjeskift efter sidste linje i din manifestfil?

Det SKAL der nemlig være - af en eller anden årsag.
Avatar billede mikkelbm Nybegynder
07. oktober 2005 - 16:51 #25
Og mht opsætning af Java, så lyder det til at være sat rigtigt op, når du får en Java fejl ved dobbeltklik på jar fil.
Avatar billede mikkelbm Nybegynder
07. oktober 2005 - 16:52 #26
Hvis du bruger packages, skal du angive hele stien til din main-class i manifestet.

ex:
mitprojekt.mainpakke.Main

Hvis ikke du bruger packages, så bare glem dette indlæg :)
Avatar billede human Nybegynder
07. oktober 2005 - 17:32 #27
Ved ikke engang hva det er, så gør jeg nok ik :P

tjekker lige manifest
Avatar billede human Nybegynder
07. oktober 2005 - 17:40 #28
haha hvor typisk, jeg havde glemt den tomme linie. Nu virker det også med dobbelt klik på den :)

Jeg siger tak, det var vidst det.

Men der kommer nok flere spørgsmål senere :)
Avatar billede mikkelbm Nybegynder
07. oktober 2005 - 21:44 #29
Havde ikke lige set din kommentar:

"Du siger du ikke bruger netbeans, må man hører hvad du bruger, som måske er bedre end netbeans?"

Jeg bruger for tiden Eclipse (http://eclipse.org/) som i mine øjne er rigtig lækker. Man kan få en masse fede plugins som gør den til et meget stærkt værktøj. Men hvis du er ved at være fortrolig med NetBeans, så synes jeg du skal gi' den en chance. Ellers er Eclipse som sagt et rigtig godt alternativ.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester