Avatar billede jugsaw Nybegynder
05. maj 2004 - 22:46 Der er 12 kommentarer og
1 løsning

Et par gui spørgsmål

I forlængelse af følgende spørgsmål http://www.eksperten.dk/spm/495069

SPØRGSMÅL 1

Jeg har gjort mig lidt overvejelser om hvorvidt jeg får mit card layout til at ”se” Kort1, som værende et kort hvor knappen forrige ikke må vises. Som det er lige nu kan man gå baglæns fra første kort til det sidste kort i stakken. Dette er der ikke noget formål med, og derfor skal denne mulighed fjernes.

Kan dog ikke helt gennemskue dette, så hvis i har nogle gode forslag, vil jeg gerne høre dem.



Ligeledes ønsker jeg, at når sidste kort er nået i stakken, skal kortet lige før (næstsidste kort) sørge for at der fremkommer et nyt panel oven på det sted hvor forrige og næste knapperne sider, dette er mit oplæg til hvordan jeg få 2 anderledes knapper på sidste kort (skal bruge print og afslut i stedet for forrige og næste).

Her kan jeg heller ikke lige gennemskue hvordan jeg får programmet til at ”se” når det er nået til næstsidste Kort, da indholdet af  Kortstakken er dynamisk (ved ikke på forhånd hvor mange kort der bliver i alt.)

Nogen der har noget erfaring med denne problematik?



SPØRGSMÅL 2
På det sidste Kort skal jeg have vist en grafisk lagkage. jeg har 3 variabler hvis værdi skal vises grafisk i lagkagen. Her er jeg helt ude og svømme, min første semester viden kan slet ikke følge med :O) Så jeg håber at i har en god løsning til dette.

Jeg har valgt at lægge godt med point ud, da det er ret vigtigt for mig at få dette til at virke (del af min gruppes eksamens fremlæggelse), set i bagspejlet har vi muligvis slået lidt for stort brød op, men det hjælper os desværre ikke på nuværende tidspunkt, hvor vores eksamen nærmere sig.

Kort1
http://up.peecee.dk/view.php?id=553&size=medium

Sidste Kort
http://up.peecee.dk/view.php?id=554



-----------Koden fra tidligere spg.---------------

import java.awt.*;

public class GUI_NyTestbesvarelse extends javax.swing.JPanel {
   
    /** Creates new form GUI_TilfoejTestbesvarelse */
    public GUI_NyTestbesvarelse() {
        initComponents();
        layout = (CardLayout)KortHolder.getLayout();   
    }
   
    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    private void initComponents() {
        KortVaelger = new javax.swing.JPanel();
        frem = new javax.swing.JButton();
        tilbage = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JSeparator();
        KortHolder = new javax.swing.JPanel();
        Kort1 = new javax.swing.JPanel();
        Kort2 = new javax.swing.JPanel();
        Kort3 = new javax.swing.JPanel();

        setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        KortVaelger.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        frem.setText("N\u00e6ste >>");
        frem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fremActionPerformed(evt);
            }
        });

        KortVaelger.add(frem, new org.netbeans.lib.awtextra.AbsoluteConstraints(700, 20, 80, -1));

        tilbage.setText("<< Forrige");
        tilbage.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tilbageActionPerformed(evt);
            }
        });

        KortVaelger.add(tilbage, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 20, -1, -1));

        KortVaelger.add(jSeparator1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 10, 780, 10));

        add(KortVaelger, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 560, 780, 50));

        KortHolder.setLayout(new java.awt.CardLayout());

        Kort1.setBackground(new java.awt.Color(255, 0, 51));
        KortHolder.add(Kort1, "card2");

        Kort2.setBackground(new java.awt.Color(51, 51, 255));
        KortHolder.add(Kort2, "card3");

        Kort3.setBackground(new java.awt.Color(0, 153, 51));
        KortHolder.add(Kort3, "card4");

        add(KortHolder, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 800, 560));

    }

    private void tilbageActionPerformed(java.awt.event.ActionEvent evt) {
        layout.previous(KortHolder);             
    }

    private void fremActionPerformed(java.awt.event.ActionEvent evt) {
        layout.next(KortHolder);             


    }
   
   
    // Variables declaration - do not modify
    private javax.swing.JPanel Kort1;
    private javax.swing.JPanel Kort2;
    private javax.swing.JPanel Kort3;
    private javax.swing.JPanel KortHolder;
    private javax.swing.JPanel KortVaelger;
    private javax.swing.JButton frem;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JButton tilbage;
    // End of variables declaration
    private CardLayout layout; 

}
Avatar billede arne_v Ekspert
05. maj 2004 - 22:53 #1
Med hensyn til grafik så er mit standard råd at finde en god
færdig pakke som kan lave det.

Kig f.eks. på http://www.jfree.org/jfreechart/index.html
Avatar billede jugsaw Nybegynder
05. maj 2004 - 23:00 #2
Ok kigger lige lidt nærmere på det.
Avatar billede conrad Nybegynder
06. maj 2004 - 09:34 #3
Du kan løse det på mange måder. Under alle omstændigheder skal du holde styr på:
1: Hvor mange kort der er ialt
2: Hvilket kort der vises

1. Selvom du siger kortstakken er dynamisk, må du kunne få informationen enten som en parameter som gives med, eller ved at tælle (hver gang du adder til cardlayoutet tæller du 1 op). Lad os kalde denne variabel cardTotal.

2. Alt afhængig af hvilket kort du starter med at vise sætter du en tæller (lad os kalde denne currentCard) til dette korts nummer. Når der trykkes tilbage tæller du 1 ned når der trykkes frem 1 op.

I din fremActionPerformed tjekker du på din currentCard. Hvis currentCard + 1 == totalCard ved du du skal til at vise det sidste kort og udfører den kode som fjerner og tilføjer nye knapper
Avatar billede _carsten Nybegynder
06. maj 2004 - 12:00 #4
Jeg vil ikke forære jer en færdig løsning, men her er faktisk hvad i skal bruge - i skal bare pille det ud.

I har fået startet lidt forkert, men er nødt til at fortsætte stilen, så med hensyn til de 2 knapper i vil tilføje, vil jeg anbefale at i tilføjer dem fra starten og så henholdsvis viser/skjuler dem når der er behov, det giver mindst fnider.

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Graphics;


public class JFrame_3 extends javax.swing.JFrame {

    public JFrame_3() {
        initComponents();
        layout = (CardLayout)KortHolder.getLayout();
        jButton1.setVisible(false);
        jButton3.setVisible(false);
        setSize(430,400);
    }

    private void initComponents() {
        KortHolder = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();
        buttonPanel = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        KortHolder.setLayout(new java.awt.CardLayout());

        jPanel1.setBackground(new java.awt.Color(102, 255, 102));
        jPanel1.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentHidden(java.awt.event.ComponentEvent evt) {
                showButton(evt);
            }
            public void componentShown(java.awt.event.ComponentEvent evt) {
                hideButton(evt);
            }
        });

        KortHolder.add(jPanel1, "card2");

        jPanel2.setBackground(new java.awt.Color(102, 102, 255));
        KortHolder.add(jPanel2, "card3");

        jPanel3.setBackground(new java.awt.Color(255, 102, 102));
        jPanel3.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentHidden(java.awt.event.ComponentEvent evt) {
                hideGrafBtn(evt);
            }
            public void componentShown(java.awt.event.ComponentEvent evt) {
                visGrafBtn(evt);
            }
        });

        KortHolder.add(jPanel3, "card4");

        getContentPane().add(KortHolder, java.awt.BorderLayout.CENTER);

        buttonPanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jButton1.setText("Previous");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                prev(evt);
            }
        });

        buttonPanel.add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, -1, -1));

        jButton2.setText("Next");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                next(evt);
            }
        });

        buttonPanel.add(jButton2, new org.netbeans.lib.awtextra.AbsoluteConstraints(360, 0, -1, -1));

        jButton3.setText("Tegn graf");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                graf(evt);
            }
        });

        buttonPanel.add(jButton3, new org.netbeans.lib.awtextra.AbsoluteConstraints(180, 0, -1, -1));

        getContentPane().add(buttonPanel, java.awt.BorderLayout.NORTH);

        pack();
    }

    private void graf(java.awt.event.ActionEvent evt) {
        Graphics g = jPanel3.getGraphics();
        g.setColor(Color.BLUE);
        g.fillArc(125, 125, 100, 100, 0, 330);
        g.setColor(Color.YELLOW);
        g.fillArc(125, 125, 100, 100, 0, 300);
        g.setColor(Color.RED);
        g.fillArc(125, 125, 100, 100, 0, 200);
        g.setColor(Color.GREEN);
        g.fillArc(125, 125, 100, 100, 0, 100);
    }

    private void hideGrafBtn(java.awt.event.ComponentEvent evt) {
        jButton3.setVisible(false);
    }

    private void visGrafBtn(java.awt.event.ComponentEvent evt) {
        jButton3.setVisible(true);
    }

    private void prev(java.awt.event.ActionEvent evt) {
        layout.previous(KortHolder);
    }

    private void next(java.awt.event.ActionEvent evt) {
        layout.next(KortHolder); 
    }

    private void showButton(java.awt.event.ComponentEvent evt) {
        jButton1.setVisible(true);
    }

    private void hideButton(java.awt.event.ComponentEvent evt) {
        jButton1.setVisible(false);
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new JFrame_3().show();
    }

    private javax.swing.JPanel KortHolder;
    private javax.swing.JPanel buttonPanel;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private CardLayout layout;
}
Avatar billede jugsaw Nybegynder
08. maj 2004 - 11:33 #5
Hej alle, beklager at jeg har været lidt sen til at svare, har haft lidt travlt

conrad: vi arbejder videre på dit oplæg, det lyder som en god måde at klare det på.

_carsten: din løsning virker også, dog kan jeg ikke helt se hvordan vi får indholdet af vores 3 variabler(int) lagt ind i den grafiske lagkage, således at den viser det som en fuld lagkage, % fordeling.
Avatar billede _carsten Nybegynder
08. maj 2004 - 12:50 #6
Eks:  g.fillArc(125, 125, 100, 100, 0, 330);

De sidste 2 parameter er henholdsvis startvinkel og slutvinkel
Start = 0 grad
Slut = 360 grad

100 % = 360 grader

Start med at lave fuld lagkage i valgt farve 0-360 grader, herefter de andre ovenpå i 0 - x grader.
Hvis jeg skal lave det mere seriøst, går der et par timer eller 3 førend jeg har tid.
Avatar billede jugsaw Nybegynder
08. maj 2004 - 17:11 #7
Vi kigger på det nu her, men hvis du har overskud, vil vi da meget gerne se et bud på hvordan det kunne gøres når du får tid :O)
Avatar billede _carsten Nybegynder
08. maj 2004 - 23:29 #8
Okay - det blev 3 meeeeget lange timer.

Her er et bud.

    private void graf(java.awt.event.ActionEvent evt) {
        Graphics g = jPanel3.getGraphics();
        // Dine variabler,
        //(ved ikke hvor og hvordan du får fat i dem, derfor denne opstilling)
        double val1 = 1200;
        double val2 = 500;
        double val3 = 1500;
        double sum = val1 + val2 + val3;
        double faktor = (double)360 / sum;

        int top = -90; // flytter nulpunkt til kl.12.00 i stedet for kl. 15.00
        int start = 0;
        int angel = (int) (val1 * faktor);

        // Tegner val1 og flytter til nyt startpunkt
        g.setColor(Color.YELLOW);
        g.fillArc(125, 125, 100, 100, top + start, angel);
        start += angel;
       
        // Tegner val2 og flytter til nyt startpunkt
        angel = (int) (val2 * faktor);
        g.setColor(Color.GREEN);
        g.fillArc(125, 125, 100, 100, top + start, angel);
        start += angel;
       
        // Tegner val3 og flytter til nyt startpunkt
        angel = (int) (val3 * faktor);
        g.setColor(Color.BLUE);
        g.fillArc(125, 125, 100, 100, top + start, angel);
    }
Avatar billede jugsaw Nybegynder
09. maj 2004 - 09:51 #9
_Carsten du er hermed erklæret som dagens mand i skysovs *L* vi havde lidt problemer med at overskue beregningen, så vi tager imod dit forslag med køshånd.

Jeg har kun et enkelt lille spg. mere, ved ikke om jeg skal oprette det som nyt eller om vi kan tage det med her.

Vores cardlayout nulstiller ikke sig selv, vi er nået til at det må være det panel der holder vores kort(kortHolder) som vi skal gøre et eller andet ved, og regner med at det sikkert er en listener af en eller anden slags vi skal bruge, med dertil hørende metode.

Nu sidder vi jo og bruge netbeans, og der kan sikkert snakkes meget for og imod det, men det har ikke rigtigt lykkes os at vinde en listener der som kan bruges. Har du et hint.
Avatar billede _carsten Nybegynder
09. maj 2004 - 12:39 #10
Jeg mangler lidt mere kød på!

1. "Nulstille" hvordan mener du (første kort altid vises i en given situation eller hvad)???

Netbeans - tja, jeg mener der kan snakkes mere for end imod.
Avatar billede jugsaw Nybegynder
10. maj 2004 - 07:50 #11
Jeg så lige at du have svaret på noget ligende i et andet spg. http://www.eksperten.dk/spm/497169 og vores problem er faktisk det samme. Kan dog ikke finde den nævente addWindowListener(new java.awt.event.WindowAdapter()  under events i netbeans.
Avatar billede _carsten Nybegynder
10. maj 2004 - 10:02 #12
Jo da - der er ikke mindre end 10 forskellige, de ligger i bunden af event
og starter med window........ (windowActivated, window...)
Avatar billede _carsten Nybegynder
10. maj 2004 - 19:18 #13
Tillader mig at lægge et svar.
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