[Java] vierkanten tekenen met behulp van een knop

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Kapiteiniglo
  • Registratie: April 2009
  • Niet online

Kapiteiniglo

Kapiteinigloo

Topicstarter
Goedemiddag allemaal,

Ik moet voor een project een programmaatje maken in java dat na een druk op een knop een aantal vierkanten tekent. Nu ben ik begonnen met het proberen of het lukt om 1 vierkant te tekenen en volgens mij ben ik er bijna. Maar het werkt niet :'( heeft iemand hier een idee wat er mis is? Het ziet er waarschijnlijk heel basic uit maar ik heb nauwelijks programmeer ervaring en ben net met java begonnen.

Alvast ontzettend bedankt :)

edit: ik vraag hier niet om een quickfix of het afmaken van mijn code, ik wil alleen weten wat ik fout doe / waar ik de in ga.

[code=java]import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class PO_informatica extends JFrame {
public static void main(String[] args) {
new PO_informatica();
}

public PO_informatica() {
this.setTitle("Vierkanten");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /
this.setSize(500, 500);
JPanel gebied = new NieuwPanel();
this.setContentPane(gebied);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
}

class NieuwPanel extends JPanel{
private JButton knop;
public Graphics g;{
knop = new JButton("Teken vierkanten");
knop.setBounds(125,125,210,20);
knop.setVisible(true);
this.add(knop);
KnopHandeling kh = new KnopHandeling();
knop.addActionListener(kh);
}
public String variabele; {
variabele = "false";}


public void paintComponent( Graphics g){
if (variabele == "true") {
super.paintComponent(g);
g.drawRect(125, 125, 250, 250);
}



}
class KnopHandeling implements ActionListener {
public void actionPerformed(ActionEvent e) {
variabele = "true";

}
}

} [/code=java]

[ Voor 4% gewijzigd door Kapiteiniglo op 31-05-2009 14:11 ]

Scientia potentia est


Acties:
  • 0 Henk 'm!

  • Rigi
  • Registratie: September 2001
  • Laatst online: 30-11-2018
Toevallig al gekeken of als je de knop klikt en dan minimaliseert/maximaliseert of de rechthoek er dan wel staat? met andere woorden zet er eens een refesh() update ( http://java.sun.com/j2se/...update(java.awt.Graphics)) bij? : )

[ Voor 26% gewijzigd door Rigi op 31-05-2009 14:21 . Reden: java een stukje verleerd ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:56

Creepy

Tactical Espionage Splatterer

"Het werkt niet".. eeh.. ok. Mijn glazen bol is stuk en debuggen zou je in eerste instantie zelf moeten doen.

Wat doet je code nu wel? Wat doet het nu precies niet? Wat had je wel verwacht? Krijg je foutmeldingen? Zo ja, welkje zijn dat dan? Ben je al aan het debuggen geslagen?

Hier in PRG draait het om het zelf programmeren. Een foutmelding + code dumpen en hopen dat wij het voor je gaan fixen is hier niet de bedoeling, ook niet als je denkt dat het een heel simpel iets is.

Tip: lijn je code eens uit. DIt is zelfs met code tags niet te lezen.

[ Voor 6% gewijzigd door Creepy op 31-05-2009 14:16 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Compilet deze code wel? Ik zie namelijk nergens een declaratie van "variabele" staan. Daarnaast heb je nog een paar andere problemen:

[ul]
• Geen uitlijning, dus onleesbaar en niet te debuggen;
• Je vergelijkt objecten met ==, dat moet je in Java niet doen;
• variabele is blijkbaar een String, maar je stopt er "true" en "false" in. Daar is een datatype voor, het heet boolean.
• Je zet wel een voorwaarde die in je paintComponent() methode gecontroleerd wordt maar die paintComponent() methode gaat niet vanzelf weer af. Je moet dus iets doen om Swing te vertellen dat er opnieuw getekend moet worden om te zorgen dat die methode weer aangeroepen gaat worden.


[edit]
Ik zie nu opeens de declaratie staan. Door het ontbreken van uitlijning keek ik er gewoon overheen. Begin daar eens mee.

[ Voor 55% gewijzigd door Gerco op 31-05-2009 14:25 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

Verwijderd

Nog wat kleine aanvullingtjes op Gerco zijn punten:

• Je doet Swing dingen op een andere thread dan de EDT. Dit kan voor onverwachte problemen zorgen. Dit is makkelijk op te lossen:
Java:
1
2
3
4
5
public static void main(String[] args) {
   SwingUtilities.invokeAndWait(new Runnable() {
      new PO_informatica();
   });
} 


• Class namen worden meestal in camelcase geschreven. In jouw geval word dit dan POInformatica. Underscores worden meestal niet gebruikt.

• Als je een ActionListener gebruikt die eigenlijk nergens anders voorkomt in je code is het vaak handig om er een anonymous inner class van te maken:


Java:
1
2
3
4
5
6
7
knop.addActionListener(new ActionListener() {
   @Override
   public void actionPerformed(ActionEvent e) {
      // Zoals Gerco al aangaf moet dit waarschijnlijk een boolean zijn.
      variabele = true;
   }
});


• Het direct gebruik van setBounds in een constructor kan voor problemen zorgen. Override doLayout() als je setBounds wilt gebruiken, of beter kijk eens naar http://java.sun.com/docs/...uiswing/layout/using.html

Acties:
  • 0 Henk 'm!

  • Kapiteiniglo
  • Registratie: April 2009
  • Niet online

Kapiteiniglo

Kapiteinigloo

Topicstarter
Hartstikke bedankt, sorry ik had het inderdaad eerst even moeten uitlijnen. Maar oke het is mij gelukt :)

Code waarmee het gelukt is:
[code=java]import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class PO extends JFrame {
public static void main(String[] args) {
new PO();
}

public PO() {
this.setTitle("Vierkanten");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 500);
JPanel gebied = new NieuwPanel();
this.setContentPane(gebied);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
}

class NieuwPanel extends JPanel {
private JButton knop;
public Graphics g;
{
knop = new JButton("Teken vierkanten");
knop.setBounds(125, 125, 210, 20);
knop.setVisible(true);
this.add(knop);
knop.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
variabele = true;
}
});
}
public Boolean variabele;
{
variabele = false;
}

public void paintComponent(Graphics g) {
if (variabele == true) {
super.paintComponent(g);
g.drawRect(125, 125, 250, 250);
}

}

}
[/code=java]

Scientia potentia est


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Je hebt nog wat rare constructies in je NieuwPanel zitten. In plaats van een constructor gebruik je static initializers, maar aan de opmaak van de code te zien heb je dat niet door.

Je doet bijvoorbeeld dit:
Java:
1
2
3
4
5
6
7
class NieuwPanel extends JPanel {
    private JButton knop;
    public Graphics g;
    {
        knop = new JButton("Teken vierkanten");
        ...
    } 


Wat je waarschijnlijk bedoeld is dit:
Java:
1
2
3
4
5
6
7
8
class NieuwPanel extends JPanel {
    private JButton knop;
    public Graphics g;

    public NieuwPanel() {
        knop = new JButton("Teken vierkanten");
        ...
    } 

[ Voor 0% gewijzigd door Gerco op 31-05-2009 22:36 . Reden: Initializers zijn niet altijd static ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
PO_informatica, vierkantjes tekenen, Software Design op de RUG? :)

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Kapiteiniglo
  • Registratie: April 2009
  • Niet online

Kapiteiniglo

Kapiteinigloo

Topicstarter
@Gerco dat had ik gedaan omdat ik allemaal fout meldingen kreeg toen ik de code om het vierkant te maken in het panel zetten.

@roy-t nee, vwo 5 informatica.. wordt de opdracht daar ook gegeven? :P

Scientia potentia est


Acties:
  • 0 Henk 'm!

  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 19-09 14:23
roy-t schreef op zondag 31 mei 2009 @ 20:51:
PO_informatica, vierkantjes tekenen, Software Design op de RUG? :)
Ow god daar heb je d'r weer een :+

Acties:
  • 0 Henk 'm!

Verwijderd

Gerco schreef op zondag 31 mei 2009 @ 19:35:
Je hebt nog wat rare constructies in je NieuwPanel zitten. In plaats van een constructor gebruik je static initializers, maar aan de opmaak van de code te zien heb je dat niet door.

Je doet bijvoorbeeld dit:
Java:
1
2
3
4
5
6
7
class NieuwPanel extends JPanel {
    private JButton knop;
    public Graphics g;
    {
        knop = new JButton("Teken vierkanten");
        ...
    } 
Alhoewel ik de syntax zeer zeker niet aanbeveel (ik zou zelfs willen stellen dat het ongebruikelijk is) is het volgens mij geen static initializer op deze manier. Voor static initializer moet je expliciet static ervoor zetten:

Java:
1
2
3
static {
   foo = "bar"
}


Zie: http://java.sun.com/docs/.../java/javaOO/initial.html
Normally, you would put code to initialize an instance variable in a constructor. There are two alternatives to using a constructor to initialize instance variables: initializer blocks and final methods.

Initializer blocks for instance variables look just like static initializer blocks, but without the static keyword:
{

// whatever code is needed for initialization goes here
}

The Java compiler copies initializer blocks into every constructor. Therefore, this approach can be used to share a block of code between multiple constructors.

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Verwijderd schreef op zondag 31 mei 2009 @ 22:26:
Alhoewel ik de syntax zeer zeker niet aanbeveel (ik zou zelfs willen stellen dat het ongebruikelijk is) is het volgens mij geen static initializer op deze manier. Voor static initializer moet je expliciet static ervoor zetten
Je hebt inderdaad gelijk, ik denk dat "static" een soort freudian slip was aangezien ik nog nooit een non-static initializer gebruikt heb :)

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Mr_Light
  • Registratie: Maart 2006
  • Niet online

Mr_Light

Zo-i-Zo de gekste.

Gerco schreef op zondag 31 mei 2009 @ 14:21:
Je vergelijkt objecten met ==, dat moet je in Java niet doen;
je vergelijk de identiteit met == , dat moet je doen in java waar dat nodig is.
Verwijderd schreef op zondag 31 mei 2009 @ 17:19:
• Het direct gebruik van setBounds in een constructor kan voor problemen zorgen.
Alhoewel het zelf aanroepen van setbounds en niet gebruiken van een layoutmanager zo 1990 is, mag je me toch uit leggen waarom je het niet in een constructor zou kunnen zetten.

Voor de rest, is de ts er al uit?
Staat die super.paintComponent(g); wel op de juiste plek? is het wel nodig? snap je wat het doet?

IceManX schreef: sowieso


Acties:
  • 0 Henk 'm!

Verwijderd

Mr_Light schreef op zondag 31 mei 2009 @ 23:14:
Alhoewel het zelf aanroepen van setbounds en niet gebruiken van een layoutmanager zo 1990 is, mag je me toch uit leggen waarom je het niet in een constructor zou kunnen zetten.
Ik zeg niet dat het niet kan, er is niemand die je tegenhoud om setBounds in een constructor te gebruiken.

Echter is het zo dat als je setBounds() in de constructor van je component aanroept je er rekening mee moet houden dat je JComponent zelf waarschijnlijk nog geen size heeft. Dus al zou je bijvoorbeeld die knop willen centreren met:
Java:
1
2
3
int knopHeight = 50;
int knopWidth = 150;
knop.setBounds( (getWidth / 2) - (knopWidth / 2), (getHeight / 2) - (knopHeight / 2), knopWidth, knopHeight);


gaat dat niet lukken omdat je JComponent zelf met getWidth() en getHeight 0 teruggeeft.

Daarnaast worden doLayout() en je implementatie van LayoutManager aangeroepen als de size van de parent van je JComponent wijzigt. Als je met setBounds in je constructor werkt heb je geen mogelijkheid daarvoor.

Om die redenen zou ik setBounds daarom niet in de constructor gebruiken van een JComponent.

Acties:
  • 0 Henk 'm!

  • Mr_Light
  • Registratie: Maart 2006
  • Niet online

Mr_Light

Zo-i-Zo de gekste.

Verwijderd schreef op maandag 01 juni 2009 @ 00:43:
...implementatie van LayoutManager aangeroepen...
Als je zelf de posities gaat regelen heb moet je geen layoutmanager installeren (super(null);)
Om die redenen zou ik setBounds daarom niet in de constructor gebruiken van een JComponent.
Was er niet bij stil gestaan dat je het zelf regelen van de posities en groottes en het gebruiken van layout managers kon mixen inderdaad.

Maar de mensen die de rationale er achter snappen, snappen ook waarom je een layoutmanager zou moeten gebruiken. hmmm...

IceManX schreef: sowieso


Acties:
  • 0 Henk 'm!

Verwijderd

Mr_Light schreef op maandag 01 juni 2009 @ 01:06:
[...]

Als je zelf de posities gaat regelen heb moet je geen layoutmanager installeren (super(null);)
Dat zeg ik ook niet :) Ik zeg hier dat zowel doLayout() als de implementatie van een LayoutManager aangeroepen worden bij het resizen van de parent. Dit in tegenstelling tot het eenmalig aanroepen van setBounds in de constructor.

Wat ik met een implementatie van LayoutManager bedoel is dat naast dat je setBounds in doLayout() kan aanroepen kan je bijv ook zelf een simpele LayoutManager implementatie schrijven en daar setBounds in aanroepen:

Voorbeeld (even snel uit me hoofd en is niet compleet maar het gaat om het idee):
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class FooPanel extends JComponent {

   private JButton barButton = new JButton("blah");

   public FooPanel() {
      setLayout(new FooPanelLayoutManager());
      add(barButton);
   }

   /**
    * Mist methods die geimplemented worden.
    */
   private class FooPanelLayoutManager implements LayoutManager {
      @Override
      public void layoutContainer(Container parent) {
         barButton.setBounds(parent.getWidth() / 2, parent.getHeight() / 2, 25, 100);
      }
   }
}

[ Voor 0% gewijzigd door Verwijderd op 01-06-2009 01:21 . Reden: typo's ]


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Mr_Light schreef op zondag 31 mei 2009 @ 23:14:
je vergelijk de identiteit met == , dat moet je doen in java waar dat nodig is.
Gezien het feit dat je het in 99,9% van dit soort gevallen (in Java) *niet* moet doen leek het me niet nodig om dat onderscheid op dit moment aan een beginner uit te leggen. Toch bedankt voor de aanvulling.

[ Voor 7% gewijzigd door Gerco op 01-06-2009 11:07 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

Verwijderd

Mr_Light schreef op zondag 31 mei 2009 @ 23:14::
[...]
je vergelijk de identiteit met == , dat moet je doen in java waar dat nodig is.
[...]
Ik snap niet precies wat je bedoelt met identiteit, maar met == vergelijk je de reference. Het enige nut wat het heeft is om te controleren of een reference niet 'null' is of om te controleren of 2 references naar hetzelfde object refereren.

[ Voor 4% gewijzigd door Verwijderd op 01-06-2009 12:02 . Reden: Oooops quote per ongeluk aan verkeerde persoon toegekend. ]


Acties:
  • 0 Henk 'm!

  • Kapiteiniglo
  • Registratie: April 2009
  • Niet online

Kapiteiniglo

Kapiteinigloo

Topicstarter
Oke mededankzij de hulp hier is het vrijwel gelukt om mijn project werkend te krijgen, maar

als ik op me knop drukt tekent hij de vierkanten die ik echter pas kan zien nadat ik gemaximaliseerd heb (ook als in de code bijv.this.setSize500,500); zet
[code=java]
public PO() {
this.setTitle("Vierkanten");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
[b]this.setSize(500,500);[/b]
JPanel gebied = new NieuwPanel();
this.setContentPane(gebied);
this.setLocationRelativeTo(null);
this.setVisible(true);[/code=java]

Mijn huidige totale code (waarin ik eerst moet minimaliseren en dan weer moet maximaliseren) :

[code=java]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PO extends JFrame {
public static void main(String[] args) {
new PO();
}

public PO() {
this.setTitle("Vierkanten");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
JPanel gebied = new NieuwPanel();
this.setContentPane(gebied);
this.setLocationRelativeTo(null);
this.setVisible(true);

}
}

class NieuwPanel extends JPanel {
private JButton knop;
public Graphics g;
{
knop = new JButton("Teken vierkanten");
knop.setBounds(125, 125, 210, 20);
knop.setVisible(true);
this.add(knop);
knop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
variabele = true;
}
});
}
public Boolean variabele;
{
variabele = false;
}

public void paintComponent(Graphics g) {

if (variabele == true) {
for (int i = 0; i <= 1; i++) {
g.drawRect(575, 125, 250, 250);
for (int i2 = 1; i2 <= 2; i2++) {
g.drawRect(600, 150, 200, 200);
for (int i3 = 1; i3 <= 2; i3++) {
g.drawRect(625, 175, 150, 150);
for (int i4 = 1; i4 <= 2; i4++) {
g.drawRect(650, 200, 100, 100);
for (int i5 = 1; i5 <= 2; i5++) {
g.drawRect(675, 225, 50, 50);
}
}
}
}
}
}
}
}
[/code=java]

Nu ben ik benieuwd waar ik in hemelsnaam de fout in ga.. een paar uur googelen en zoeken heeft helaas niets opgeleverd :( alvast ontzettend bedankt :)

Scientia potentia est


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Om mezelf even te quoten van een paar dagen geleden:

[quote]Gerco schreef op zondag 31 mei 2009 @ 14:21:
• Je zet wel een voorwaarde die in je paintComponent() methode gecontroleerd wordt maar die paintComponent() methode gaat niet vanzelf weer af. Je moet dus iets doen om Swing te vertellen dat er opnieuw getekend moet worden om te zorgen dat die methode weer aangeroepen gaat worden.

Je mist dus de hint aan Swing dat er opnieuw getekend (repaint) moet worden.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Mr_Light
  • Registratie: Maart 2006
  • Niet online

Mr_Light

Zo-i-Zo de gekste.

Verwijderd schreef op maandag 01 juni 2009 @ 11:36:
[...]


Ik snap niet precies wat je bedoelt met identiteit, maar met == vergelijk je de reference. Het enige nut wat het heeft is om te controleren of een reference niet 'null' is of om te controleren of 2 references naar hetzelfde object refereren.
Wanneer je het over de referencie hebt heb je het al over de implementatie van de operator, ander niveau van abstractie

"2 references naar hetzelfde object refereren" 'hetzelfde' object, hoe bepaal je dat?
http://www.artima.com/intv/gosling313.html

Wat betreft het topic volgens mij is het al gezegt: java gaat niet vanzelf tekenen.
(er is wel value binding in javafx)

anyways:
code:
1
2
3
4
5
            @Override
            public void actionPerformed(ActionEvent e) {
                variabele = true;
                NieuwPanel.this.repaint();
            }

IceManX schreef: sowieso


Acties:
  • 0 Henk 'm!

Verwijderd

Mr_Light schreef op woensdag 03 juni 2009 @ 16:39:
[...]

Wanneer je het over de referencie hebt heb je het al over de implementatie van de operator, ander niveau van abstractie
Ik spreek naar mijn idee nog nergens over implementatie. Het beestje word in de JLS onder de "Reference Equality Operators" geschaard. Zie http://java.sun.com/docs/...pressions.doc.html#236163 . Dat is het hele doel van de operator, references vergelijken.

Voor completeness sake:
Als Swing dev mag je zelf nooit paint() aanroepen maar moet je altijd repaint() gebruiken. paint() is bedoelt voor Swing en begint meteen alles opnieuw te tekenen. repaint() plaatst een verzoek om alles opnieuw te tekenen.

Acties:
  • 0 Henk 'm!

  • 3ssen
  • Registratie: Augustus 2005
  • Laatst online: 19-09 09:56
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (variabele == true) {
            for (int i = 0; i <= 1; i++) {
                g.drawRect(575, 125, 250, 250);
                for (int i2 = 1; i2 <= 2; i2++) {
                    g.drawRect(600, 150, 200, 200);
                    for (int i3 = 1; i3 <= 2; i3++) {
                        g.drawRect(625, 175, 150, 150);
                        for (int i4 = 1; i4 <= 2; i4++) {
                            g.drawRect(650, 200, 100, 100);
                            for (int i5 = 1; i5 <= 2; i5++) {
                                g.drawRect(675, 225, 50, 50);
                            }
                        }
                    }
                }
            }
        }
    } 


Wat ben je hiermee van plan om te doen? Zoals ik het vlug bekijk teken je 184 keer een vierkant, terwijl je er maar 5 gaat zien.

Acties:
  • 0 Henk 'm!

  • Kapiteiniglo
  • Registratie: April 2009
  • Niet online

Kapiteiniglo

Kapiteinigloo

Topicstarter
@3ssen

deze manier kregen we aangedragen in de opdracht en het is de bedoeling dat ik 5 vierkanten teken.

Scientia potentia est


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 18:43

BCC

if (variabele == true)
ROFL :+

[ Voor 4% gewijzigd door BCC op 03-06-2009 20:51 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

Verwijderd

Errrrr, wat is er zo grappig aan een if statement ?

Acties:
  • 0 Henk 'm!

  • jeroenikke
  • Registratie: Augustus 2003
  • Laatst online: 20-09 13:04
Dat het iets logischer is om
code:
1
if (variabele)

te gebruiken

Maar 't is niet fout

Acties:
  • 0 Henk 'm!

Verwijderd

jeroenikke schreef op woensdag 03 juni 2009 @ 21:18:
Dat het iets logischer is om
code:
1
if (variabele)

te gebruiken

Maar 't is niet fout
Er zitten nog wel zat andere stijl fouten in bovenstaande code; Maar onze mede-tweaker is nog aan het leren, vind het dan niet heel constructief en zelfs een beetje jammer om hem dan uit te lachen.

Acties:
  • 0 Henk 'm!

  • Mr_Light
  • Registratie: Maart 2006
  • Niet online

Mr_Light

Zo-i-Zo de gekste.

Verwijderd schreef op woensdag 03 juni 2009 @ 20:24:
[...]


Ik spreek naar mijn idee nog nergens over implementatie. Het beestje word in de JLS onder de "Reference Equality Operators" geschaard. Zie http://java.sun.com/docs/...pressions.doc.html#236163 . Dat is het hele doel van de operator, references vergelijken.
De JLS is uberhaupt een beetje screwy daar of niet? onder welke van de drie categorien schaar jij het primitieve type char? Je zou het als primitive numeric type kunnen zetten mischien..

Dan nog, meteen onder het kopje "Reference Equality Operators":
"If the operands of an equality operator are both of either reference type or the null type, then the operation is object equality." Gaan we het nu Reference quality hebben of over object equality? 8)7

"At run time, the result of == is true if the operand values are both null or both refer to the same object or array" is het zelfde zijn van het object nu leidend of het zelfde zijn van de referentie nu leidend? gaat het uitmaken?

IceManX schreef: sowieso


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 18:43

BCC

Verwijderd schreef op woensdag 03 juni 2009 @ 21:30:
[...]
Er zitten nog wel zat andere stijl fouten in bovenstaande code; Maar onze mede-tweaker is nog aan het leren, vind het dan niet heel constructief en zelfs een beetje jammer om hem dan uit te lachen.
Dit wordt met regelmaat als voorbeeld gebruikt op www.thedailywtf.com in de categorie code waar je van moet huilen. Ik moest daar gelijk en denken en vond dat grappig, maar blijkbaar was ik de enige.

http://thedailywtf.com/Co...and-a-Whole-Lot-More.aspx

[ Voor 9% gewijzigd door BCC op 04-06-2009 00:39 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Mr_Light
  • Registratie: Maart 2006
  • Niet online

Mr_Light

Zo-i-Zo de gekste.

wrong place wrong time. Ook word men volgens mij niet bij naam en toe naam genoemd op die site, hier isde situatie even anders.

[ Voor 20% gewijzigd door Mr_Light op 04-06-2009 01:18 ]

IceManX schreef: sowieso


Acties:
  • 0 Henk 'm!

Verwijderd

Mr_Light schreef op woensdag 03 juni 2009 @ 22:56:
[...]
De JLS is uberhaupt een beetje screwy daar of niet? onder welke van de drie categorien schaar jij het primitieve type char? Je zou het als primitive numeric type kunnen zetten mischien..

Dan nog, meteen onder het kopje "Reference Equality Operators":
"If the operands of an equality operator are both of either reference type or the null type, then the operation is object equality." Gaan we het nu Reference quality hebben of over object equality? 8)7

"At run time, the result of == is true if the operand values are both null or both refer to the same object or array" is het zelfde zijn van het object nu leidend of het zelfde zijn van de referentie nu leidend? gaat het uitmaken?
Duidelijk is inderdaad anders. Iemand van Tweakers misschien op de JavaOne die het aan James kan vragen ? :)

Onderaan de streep maakt het inderdaad allemaal niet heel veel uit welke van de 2 je vergelijkt, onderaan de streep is het effect hetzelfde. Misschien dat verschillende JVM's het wel op verschillende manieren doen als de spec er niet 100% uitsluitsel over geeft.

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Mr_Light schreef op woensdag 03 juni 2009 @ 22:56:
[...]


De JLS is uberhaupt een beetje screwy daar of niet? onder welke van de drie categorien schaar jij het primitieve type char? Je zou het als primitive numeric type kunnen zetten mischien..

Dan nog, meteen onder het kopje "Reference Equality Operators":
"If the operands of an equality operator are both of either reference type or the null type, then the operation is object equality." Gaan we het nu Reference quality hebben of over object equality? 8)7

"At run time, the result of == is true if the operand values are both null or both refer to the same object or array" is het zelfde zijn van het object nu leidend of het zelfde zijn van de referentie nu leidend? gaat het uitmaken?
Object Identiteit is hetzelfde als object equality is hetzelfde als reference equality. Het taalgebruik is soms verwarrend, maar hier wordt weldegelijk hetzelfde mee bedoeld. 'Object equality' in deze context is simpelweg 'dit is hetzelfde object' en dus is de reference hetzelfde. Een vergelijking met '.equals()' is meer 'deze objecten mogen als hetzelfde beschouwd worden'. Volgens mij is daar helaas niet echt een andere term voor in het Engels dan ook 'equality' (of misschien 'equalness'?).

Acties:
  • 0 Henk 'm!

  • Jegorex
  • Registratie: April 2004
  • Laatst online: 03-09 23:24
martijn--g schreef op woensdag 03 juni 2009 @ 20:47:
@3ssen

deze manier kregen we aangedragen in de opdracht en het is de bedoeling dat ik 5 vierkanten teken.
Deze code stond al in de opdracht?
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (variabele == true) { 
            for (int i = 0; i <= 1; i++) { 
                g.drawRect(575, 125, 250, 250); 
                for (int i2 = 1; i2 <= 2; i2++) { 
                    g.drawRect(600, 150, 200, 200); 
                    for (int i3 = 1; i3 <= 2; i3++) { 
                        g.drawRect(625, 175, 150, 150); 
                        for (int i4 = 1; i4 <= 2; i4++) { 
                            g.drawRect(650, 200, 100, 100); 
                            for (int i5 = 1; i5 <= 2; i5++) { 
                                g.drawRect(675, 225, 50, 50); 
                            } 
                        } 
                    } 
                } 
            } 
        } 
    }

De afmeting van je programmaatje is 500x500, je moet eens kijken waar de rechthoeken van jou geplaatst zijn.
drawRect(int x, int y, int width, int height)

Tevens zou je alle for lussen weg kunnen halen omdat je op deze manier al handmatig 5 rechthoeken maakt.
Een andere manier zou zijn om 1 for lus te maken die 5x uitgevoerd wordt en met behulp van variabelen 5 vierkanten op verschillende plaatsen maakt.

Acties:
  • 0 Henk 'm!

Verwijderd

Applets blijven niet repainten. Dus in de actionPerformed moet je je 'variabele' idd op true zetten en dan repaint aanroepen. Dan gebeurd er iig al wat meer. suc6.

[ Voor 7% gewijzigd door Verwijderd op 08-06-2009 11:15 . Reden: spelling ]


Acties:
  • 0 Henk 'm!

Verwijderd

Not cool om dat gast zelf al aangeeft dat hij java nog aan het leren is en omdat dezelfde opmerking al eens geplaatst is.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 09 juni 2009 @ 15:52:
[...]
Not cool om dat gast zelf al aangeeft dat hij java nog aan het leren is en omdat dezelfde opmerking al eens geplaatst is.
Daarnaast is "if (blah == true)" ook niet een doodzonde en een niet eens ROFL waard (los van dat het mis plaatst is).

Ik opende voor de grap de JComponent class en deed een search:

Java:
1
2
3
4
if (comp != null &&
                    (isJComponent || isLightweightComponent(comp)) && 
                    (comp.isVisible() == true)) {
                    Rectangle cr;

Poef, meteen raak.

Word waarschijnlijk toch naar dezelfde machine code gecompiled door de JIT compiler.

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 18:43

BCC

Tjonge jonge, nou wordt er wel HEEL zwaar aan getild jongens (zie ook BCC in "[Java] vierkanten tekenen met behulp van...")

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.

Pagina: 1