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(); } });
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?
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); } }
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?
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.
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?
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:
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?
"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.
Synes godt om
Ny brugerNybegynder
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.