Avatar billede tendal Nybegynder
04. september 2004 - 12:31 Der er 21 kommentarer og
1 løsning

Hvordan sættes der et id på en JButton?

Hej

Jeg kan ikke helt finde ud hvordan jeg tildeler mine knapper en eller anden form for id.

Jeg ville gerne have en funktion
JButton jb = new JButton();
jb.setId(1);

Det er fordi jeg gerne vil kunne genkende mine knapper på andet end setText();

Håber det giver mening - ellers er jeg klar på tillægsspørgsmål

Anders
Avatar billede soreno Praktikant
04. september 2004 - 12:34 #1
Hvad med at bruge (get|set)Name()

?
Avatar billede arne_v Ekspert
04. september 2004 - 12:37 #2
Øh.

Du har jo da en variabel som peger på din JButton.

Hvad skal du bruge en ydeligere identifikation til ?
Avatar billede tendal Nybegynder
04. september 2004 - 12:40 #3
Det er fordi jeg opretter en række JButtons i en while lykke - det betyder jo at de får det samme variabel navn, men jeg skal i min actionListener på knappen gerne kunne kende forskel på dem
Avatar billede arne_v Ekspert
04. september 2004 - 12:41 #4
Lav de JButtons som et array og test på om de er et bestemt array element.
Avatar billede arne_v Ekspert
04. september 2004 - 12:43 #5
Eksempel:

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

public class MultiButton extends JFrame implements ActionListener {
  JButton[] button;
  public MultiButton(int n) {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      getContentPane().setLayout(new GridLayout(5, n / 5));
      button = new JButton[n];
      for (int i = 0; i < button.length; i++) {
        button[i] = new JButton("Button " + (i + 1));
        button[i].addActionListener(this);
        getContentPane().add(button[i]);
      }
      pack();
  }
  public void actionPerformed(ActionEvent ev) {
      for (int i = 0; i < button.length; i++) {
        if (ev.getSource() == button[i]) {
            JOptionPane.showMessageDialog(null, "Number " + (i + 1));
        }
      }
  }
  public static void main(String[] args) {
      MultiButton f = new MultiButton(20);
      f.show();
  }
}
Avatar billede mikkelbm Nybegynder
04. september 2004 - 12:43 #6
Kan du ikke bare bruge:

JButton[] buttons = new JButton[5];

så har du id (index) for hver JButton ?
Avatar billede mikkelbm Nybegynder
04. september 2004 - 12:44 #7
Undskyld, Arne - så ikke dit indlæg!
Avatar billede arne_v Ekspert
04. september 2004 - 12:45 #8
Din ide med id vil iøvrigt virke udmærket i action listener.

Men jeg vil absolut anbefale dig at have en reference til alle dine buttons.

Og hvis du har det, så er id'en overflødig.
Avatar billede tendal Nybegynder
04. september 2004 - 12:45 #9
Jo det ser ud som om at i alle har fat i noget der kan bruges
Avatar billede tendal Nybegynder
04. september 2004 - 13:24 #10
Ok - det ser ud til at virke - men jeg er ikke helt med på hvad jeg skal gøre i min actionListener? Det der er min mening er at knappens nr skal sendes med i constructeren til Resultat
ActionListener Resultat = new ActionListener(){
        public void actionPerformed(ActionEvent e){
            Resultat res = new Resultat(knappens id);
            res.setSize(100,270);
            res.setVisible(true);
Avatar billede tendal Nybegynder
04. september 2004 - 13:33 #11
Kunsten er jo at det skal være det index som knappen der trykkes på har der skal sendes med i constructeren - men hvordan???
Avatar billede arne_v Ekspert
04. september 2004 - 13:38 #12
Hvis du bruger array så skal du have en løkke omkring.

Hvis du bruger navn må du kunne bruge getName.
Avatar billede tendal Nybegynder
04. september 2004 - 13:51 #13
Jeg gjorde det på følgende måde - jeg ved ikkeom det er dumt, men det virker
ActionListener Resultat = new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if (e.getSource() == resultat[1])
            {
                Resultat res = new Resultat(1);
                res.setSize(100,270);
                res.setVisible(true);
            }
            if (e.getSource() == resultat[2])
            {
                Resultat res = new Resultat(2);
                res.setSize(100,270);
                res.setVisible(true);
            }
Avatar billede mikkelbm Nybegynder
04. september 2004 - 13:52 #14
Bare husk at array-index starter ved 0 og ikke 1 !
Avatar billede mikkelbm Nybegynder
04. september 2004 - 13:58 #15
Men jeg vil nok gøre som Arne og putte det i en løkke:

ActionListener Resultat = new ActionListener()
{
        public void actionPerformed(ActionEvent e)
        {
            for (int i = 0; i < resultat.length; i++)
            {
                if (e.getSource() == resultat[i])
                {
                    Resultat res = new Resultat(i+1);
                    res.setSize(100,270);
                    res.setVisible(true);
                }
            }
        }
}
Avatar billede tendal Nybegynder
04. september 2004 - 14:04 #16
JA det kan der være noget om - det bliver jo en del pænere - og mere overskueligt
Avatar billede tendal Nybegynder
04. september 2004 - 15:34 #17
Jeg skal nok bruge et svar for at kunne give point - det mest oplagte er vel arne_v
Avatar billede arne_v Ekspert
04. september 2004 - 15:39 #18
ok
Avatar billede tendal Nybegynder
22. september 2004 - 09:02 #19
Jeg ved spørgsmålet er lukket men det kunne jo være at nogen kiggede ind alligevel - da jeg lige har et tillægs spørgsmål. Når jeg nu befinder mig inde i ActionListener klassen (4 tråde oppe)og gerne vil kunne sende den ydre klasse med som parameter i Resultat res = new Resultat(i+1, ydre klasse) - hvordan gør jeg det - jeg kan jo ikke skrive this da det så er ActionListener klassen der sendes med, men super anvendes vel kun ved nedarvning???
Avatar billede arne_v Ekspert
22. september 2004 - 19:25 #20
Lad din JFrame klasse selv implementere ActionListener som i mit eksempel.

Det er nemmere i det her tilfælde.
Avatar billede tendal Nybegynder
22. september 2004 - 22:53 #21
Ja det var også min første tanke, men jeg kan ikke få det til at virke. Det virker sikkert fint med at give klassen med som parameter, men problemet er at der ikke sker noget når man trykker på knappen - jeg smider lige noget kode, så kan du måske se hvor det går galt, men jeg advarer der er en del
Avatar billede tendal Nybegynder
22. september 2004 - 23:03 #22
Jeg tror jeg går i seng nu - har lige fundet fejlen. Havde glemt at tilføje ny actionlistener til knappen - altså button[i].addActionListener(this);
Ikke klogt men sådan går det jo engang imellem :o) - Tak for hjælpen i hvert fald
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