Avatar billede andreasbj Nybegynder
17. maj 2005 - 16:07 Der er 10 kommentarer og
1 løsning

Billede som knap (Mouselistener)

Jeg er igang med et projekt og jeg skal have et billede til at virke som en knap. Man skal klikke på det og så skal den painte noget nyt, den skal skifte bg-billedet ud. Men kan ikke rigtig finde ud af hvordan jeg bruger mouseListener til det. Vil gerne have det sådan at "knappen" viser et andet billede når man holder musen over den så der skal bruges mouselistener.

Nogen kloge hoveder herinde som har forslag til en opbygning af denne lille knap?

mvh. Andreas
Avatar billede _carsten Nybegynder
17. maj 2005 - 21:33 #1
Du kan jo putte et image i en JLabel og add en mouseListener til den, så har du hvad du skal bruge.
Avatar billede andreasbj Nybegynder
17. maj 2005 - 21:37 #2
Kan sige at jeg er ved at lave et program til noget biograf booking. Jeg har så lavet et grafisk interface og gemt det som en række billeder. Først skal brugeren indtaste sit navn og tlf.nr. og siden vælge antal billetter. Her skal man så klikke på et billede (en knap) for at gå videre. med at gå videre menes at der skal paintes et nyt billede oven på det gamle og nye textfields og choiceboxes skal komme frem. Vil gerne lave denne knap klasse så jeg både kan lave denne knap til at gå videre og til at virke på en anden måde:

Når man bestiller billetter ser man et billede af en biograf med et antal sæder disse sæder skal også kunne klikkes på og ved klik skal billedet skifte til et andet billede. Så kan godt forestille mig at man kan bruge den samme klasse for begge knapper.

Håber meget der er nogen som har et forslag for sidder ret meget fast her!
Avatar billede andreasbj Nybegynder
17. maj 2005 - 21:47 #3
Er det sådan du kan uddybe hvordan man sætter et billede ind i jlabel (er lidt ny til de grafiske komponenter.
Avatar billede _carsten Nybegynder
17. maj 2005 - 21:57 #4
Så er du ikke bare kørt lidt fast, men meget fast.

JLabel label;
label.setIcon(new javax.swing.ImageIcon(getClass().getResource("/billede_1.gif")));
Avatar billede andreasbj Nybegynder
17. maj 2005 - 22:02 #5
okay det er .setIcon fandt en der hed createimage
Avatar billede andreasbj Nybegynder
17. maj 2005 - 22:02 #6
prøver lige den der
Avatar billede _carsten Nybegynder
17. maj 2005 - 22:05 #7
Her er et eksempel med en JLabel som skifter billede når du kører musen henover.

Læg 2 billeder i samme folder som class filen, kald dem billede_1.gif og billede_2.gif

Så kan du se hvordan det virker

public class ImageTest extends javax.swing.JFrame {
   
    public ImageTest() {
        initComponents();
        setSize(200,200);
    }
   
    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();

        getContentPane().setLayout(new java.awt.FlowLayout());

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jLabel1.setBorder(new javax.swing.border.EtchedBorder());
        jLabel1.setPreferredSize(new java.awt.Dimension(100, 100));
        jLabel1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                enter(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                exit(evt);
            }
        });

        getContentPane().add(jLabel1);

        pack();
    }


    private void exit(java.awt.event.MouseEvent evt) {
        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource( "/billede_1.gif" )));
    }

    private void enter(java.awt.event.MouseEvent evt) {
        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource( "/billede_2.gif" )));
    }
   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ImageTest().setVisible(true);
            }
        });
    }
   
    private javax.swing.JLabel jLabel1;
}
Avatar billede andreasbj Nybegynder
17. maj 2005 - 22:15 #8
okay prøver lige at teste det.
Avatar billede andreasbj Nybegynder
17. maj 2005 - 22:45 #9
okay det er nok noget jeg kan bruge til noget...Tror du det kan lade sig gøre at sætte det ind som en klasse som f.eks. hedder knap hvor man kan oprette en ny knap som f.eks. knap("/billede1.gif") og så videre hvor den opretter en række knapper.
Avatar billede andreasbj Nybegynder
17. maj 2005 - 22:46 #10
og forresten hvad gør Pack() metoden i koden??
Avatar billede _carsten Nybegynder
17. maj 2005 - 23:22 #11
Ja - noget a la nedenstående

public class Knap extends JLabel{
    public Knap(String billede_1, String billede_2){
        this.billede_1 = billede_1;
        this.billede_2 = billede_2;

        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                setIcon(new javax.swing.ImageIcon(getClass().getResource( "/" + billede_2 )));

            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                setIcon(new javax.swing.ImageIcon(getClass().getResource( "/" + billede_2 )));

            }
        });

    }

    private String billede_1;
    private String billede_2;
}

Og så bare :
    new Knap(billede_1, billede_2);
    new Knap(billede_3, billede_4);
    new Knap(billede_5, billede_6);
    new Knap(billede_7, billede_8);


pack():
Samler/komprimerer dine komponenter så de ikke fylder mere end deres foretrukne størrelse - altså det de som minimum kræver af plads, medmindre du har brugt setPreferredSize() så vil de have denne størrelse, alt afhængig af hvilken LayoutManager du anvender
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