[JAVA] Toegang tot components voor JButton

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Code in de de constructor:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
  public Calculator() 
  {
    setLayout(new BorderLayout());

    display.setEditable(false);
    add(display, "North");

    JPanel p1 = new JPanel();
    GridLayout grid1 = new GridLayout(4, 6);
    p1.setLayout(grid1);
    
    JPanel p2 = new JPanel();
    GridLayout grid2 = new GridLayout(1, 3);
    //grid.setHgap(10);    
    p2.setLayout(grid2);


    //Rij 1
    buttonTextGrid1[0] = "MC";
    buttonTextGrid1[1] = "7";
    buttonTextGrid1[2] = "8";
    buttonTextGrid1[3] = "9";
    buttonTextGrid1[4] = "/";
    buttonTextGrid1[5] = "sqrt";
    //Rij 2
    buttonTextGrid1[6] = "MR";
    buttonTextGrid1[7] = "4";
    buttonTextGrid1[8] = "5";
    buttonTextGrid1[9] = "6";
    buttonTextGrid1[10] = "*";
    buttonTextGrid1[11] = "%";
    //Rij 3
    buttonTextGrid1[12] = "M-";
    buttonTextGrid1[13] = "1";
    buttonTextGrid1[14] = "2";
    buttonTextGrid1[15] = "3";
    buttonTextGrid1[16] = "-";
    buttonTextGrid1[17] = "1/x";
    //Rij 4
    buttonTextGrid1[18] = "M+";
    buttonTextGrid1[19] = "0";
    buttonTextGrid1[20] = "+/-";
    buttonTextGrid1[21] = ".";
    buttonTextGrid1[22] = "+";
    buttonTextGrid1[23] = "=";
    //Rij 5
    buttonTextGrid2[0] = "Backspace";
    buttonTextGrid2[1] = "CE";
    buttonTextGrid2[2] = "C";
    
    for (int i = 0; i < buttonTextGrid1.length; i++) 
    {

      JButton b = new JButton(buttonTextGrid1[i]);
      b.setName(buttonTextGrid1[i]);
      p1.add(b);
      b.addActionListener(this);

    }
   
    for (int i = 0; i < buttonTextGrid2.length; i++) 
    {
      JButton b = new JButton(buttonTextGrid2[i]);
      p2.add(b);
      b.addActionListener(this);
    }
    add(p1, "Center");
    add(p2, "South");
     
  }


Code in een aparte method:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  private void memoryStuff(double tR) 
  {
        //Routines voor memory
        if (memoryOperator.equals("M+"))
        {   
            memoryBank += tR;
            //light up memorybutton if != 0 
            if(memoryBank != 0)
            {
                //Ik krijg dit helaas niet werkend. Als ik dit onderaan de constructor zet werkt het 
                //prima maar het moet natuurlijk hier werken op het moment dat memory value heeft.
                //Ik zou zeggen dat memoryStuff toegang heeft tot components?
            //--->  Component[] components = p1.getComponents();
            //--->  components[18].setBackground(Color.red);
            }
        }
}


Voor een rekenmachientje wil ik de M+ (memory) knop laten oplichten als deze value heeft. Nu zit ik al
een hele tijd te klooien maar ik krijg het niet voor elkaar. Ik verwijs in method memoryStuff naar de components array. Deze roept dan getcomponents op van het panel wat ik in de constructor heb gemaakt.
Maar hij krijgt geen access tot die p1, zet ik twee regels (met //--->) gewoon onderaan de constructor werkt het wel. Ik ben geen java held, dus mss is het iets simpels...

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Tsja, p1 is geen beschikbare variabele daar, zie ergens hier voor een stukje uit een tutorial over java. Misschien is het een goed idee om eens een goed boek/goede tutorial door te werken in plaats van lukraak te proberen of vragen te stellen. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 24-08 23:40

Killemov

Ik zoek nog een mooi icooi =)

Nou, da's weer eens een hele eenvoudige ... p1 en p2 (de referenties dus) bestaan alleen in de constructor.

code:
1
2
JPanel p1;
JPanel p2;


bovenaan je class zetten en ze zijn ineens fields geworden ipv lokale variabelen.

Hey ... maar dan heb je ook wat!


Acties:
  • 0 Henk 'm!

  • Tharulerz
  • Registratie: April 2009
  • Laatst online: 10-04 05:16
Je moet je variabelen zoals p1 en dergelijke niet aanmaken in je constructor maar daarboven.

Je definieert eerst je instantievariabelen, en dan ga je ze pas in je constructor initialiseren.

Je voorbeeld zou er dus zo uitzien:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
class Calculator {
   private Jpanel p1,p2;
   private GridLayout grid1,grid2;

   public Calculator()
   {
      //instantieer nu je variabelen
      p1 = new JPanel();
      p2 = new JPanel();
      grid1 = new GridLayout (4,6);
      grid2 = new GridLayout(1,3);
   }
}


op deze manier zijn je variabelen accessible in elke methode in je klasse. Variabelen die je aanmaakt in een functie zijn per definitie enkel beschikbaar in die functie.

edit: blijkbaar ben ik te laat... maar mijn post is uitgebreider :)

[ Voor 7% gewijzigd door Tharulerz op 04-03-2010 00:47 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
En het toverwoord van vandaag is scope ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik zal de volledige code maar even neerzetten. Ik heb dus wel de variabelen buiten de constructor gedefinieerd.

code:
1
*SNIP*

[ Voor 96% gewijzigd door RobIII op 04-03-2010 01:00 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op donderdag 04 maart 2010 @ 00:56:
ik zal de volledige code maar even neerzetten. Ik heb dus wel de variabelen buiten de constructor gedefinieerd.

code:
1
*SNIP*
Euh; hou het a.u.b. bij relevante(!!) delen code; 300+ regels code zijn overkill.
offtopic:
En als je nou [code=java] gebruikt krijg je gratis en voor niks syntax-highlighting ;)

[ Voor 13% gewijzigd door RobIII op 04-03-2010 01:02 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
whoops excuus.

Ik heb (o.a) deze dus buiten de constructor gedefineerd. Dat houdt toch in dat deze in de hele class bereikbaar zijn?

Java:
1
2
3
4
5
6
  private String[] buttonTextGrid1 = new String[24];
  private String[] buttonTextGrid2 = new String[3];
  private Component[] components = new Component[24];
  private JButton b;
  private JPanel p1, p2;
  private GridLayout grid1, grid2;

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op donderdag 04 maart 2010 @ 01:06:
whoops excuus.

Ik heb (o.a) deze dus buiten de constructor gedefineerd. Dat houdt toch in dat deze in de hele class bereikbaar zijn?
Nee je declareert naast de class members p1 en p2 nog een p1 en p2 in de constructor. 3 keer raden welke p1 en p2 de JPanels geassigned krijgen... ;)

Verdiep je nou eens in RobIII in "[JAVA] Toegang tot components voor JButton"

[ Voor 17% gewijzigd door RobIII op 04-03-2010 01:15 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Aargh inderdaad, stom zeg. Thanks guys, ik weet dat het een simpel probleem is, maar ik ben inmiddels helemaal scheel van het codestaren. Ik heb me niet gerealiseerd dat je hiermee een nieuwe p1 declareerd. thanks, het werkt nu!

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op donderdag 04 maart 2010 @ 01:19:
Aargh inderdaad, stom zeg. Thanks guys, ik weet dat het een simpel probleem is, maar ik ben inmiddels helemaal scheel van het codestaren. Ik heb me niet gerealiseerd dat je hiermee een nieuwe p1 declareerd. thanks, het werkt nu!
Dan heb ik hier nog een tip voor je: Debuggen: Hoe doe ik dat?. Scheelt staren. Meten = weten ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1