[JAVA] Lijnen tekenen in applet verwerken

Pagina: 1
Acties:

  • Opperhoof
  • Registratie: Mei 2003
  • Nu online
Opperhoof is weer aan het programmeren geslagen, dus dat beloofd niet veel goeds.

anyway; Ik heb een applet in Visual Cafe 4.1. Het applet gaat aan het rekenen met de lensformule. Hij werkt redelijk goed, oftwel hij doet wat hij moet doen.
Maar ik wil nu dus een simpel plaatje tekenen met de beeldas en lens en brandpunt lijnen enzo, je kent het wel. Zou in principe niet zo heel moeilijk moeten zijn.
Alleen ik krijg het maar niet voor elkaar om ook maar 1 zielig lijntje te tekenen. de code heb ik, voer ik in, maar er wordt niets getekend! en ik weet echt niet waarom...?

goed, eerste de code:
Java:
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
 A basic extension of the java.applet.Applet class
 */

import java.awt.*;
import java.applet.*;

public class Applet1 extends Applet
{
 public void init()
 {
  // Take out this line if you don't use symantec.itools.net.RelativeURL or symantec.itools.awt.util.StatusScroller
  symantec.itools.lang.Context.setApplet(this);
 
  // This code is automatically generated by Visual Cafe when you add
  // components to the visual environment. It instantiates and initializes
  // the components. To modify the code, only use code syntax that matches
  // what Visual Cafe can generate, or Visual Cafe may be unable to back
  // parse your Java file into its visual environment.
  //{{INIT_CONTROLS
  setLayout(null);
  setSize(526,433);
  label2.setText("vergroting");
  add(label2);
  label2.setBounds(12,288,89,22);
  add(voorwerpgrootte);
  voorwerpgrootte.setBounds(108,360,96,24);
  add(beeld);
  beeld.setBounds(108,252,96,24);
  label4.setText("voorwerpgrootte");
  add(label4);
  label4.setBounds(12,360,95,26);
  label1.setText("beeldafstand");
  add(label1);
  label1.setBounds(12,252,92,28);
  add(beeldgrootte);
  beeldgrootte.setBounds(108,396,96,24);
  add(voorwerp);
  voorwerp.setBounds(108,216,96,24);
  label3.setText("lenssterkte");
  add(label3);
  label3.setBounds(12,324,81,25);
  voorwerpafstand.setText("voorwerpafstand");
  add(voorwerpafstand);
  voorwerpafstand.setBounds(12,216,92,28);
  button1.setLabel("bereken");
  add(button1);
  button1.setBackground(java.awt.Color.lightGray);
  button1.setBounds(252,312,84,36);
  add(lenssterkte);
  lenssterkte.setBounds(108,324,96,24);
  add(vergroot);
  vergroot.setBounds(108,288,96,24);
  label5.setText("beeldgrootte");
  add(label5);
  label5.setBounds(12,396,95,26);
  //}}
 
  //{{REGISTER_LISTENERS
  SymAction lSymAction = new SymAction();
  button1.addActionListener(lSymAction);
  //}}
 }
 
 //{{DECLARE_CONTROLS
 java.awt.Label label2 = new java.awt.Label();
 java.awt.TextField voorwerpgrootte = new java.awt.TextField();
 java.awt.TextField beeld = new java.awt.TextField();
 java.awt.Label label4 = new java.awt.Label();
 java.awt.Label label1 = new java.awt.Label();
 java.awt.TextField beeldgrootte = new java.awt.TextField();
 java.awt.TextField voorwerp = new java.awt.TextField();
 java.awt.Label label3 = new java.awt.Label();
 java.awt.Label voorwerpafstand = new java.awt.Label();
 java.awt.Button button1 = new java.awt.Button();
 java.awt.TextField lenssterkte = new java.awt.TextField();
 java.awt.TextField vergroot = new java.awt.TextField();
 java.awt.Label label5 = new java.awt.Label();
 //}}

 class SymAction implements java.awt.event.ActionListener
 {
  public void actionPerformed(java.awt.event.ActionEvent event)
  {
   Object object = event.getSource();
   if (object == button1)
    button1_ActionPerformed(event);
  }
 }

 void button1_ActionPerformed(java.awt.event.ActionEvent event)
 {
  String voor = voorwerp.getText();
  String beel = beeld.getText();
  String lens = vergroot.getText();
  String voorwe = voorwerpgrootte.getText();
  String beeldgr = beeldgrootte.getText();
  String lenssterk = lenssterkte.getText();
  
     
  
  
  if (voor.equals(""))
 { 
  float beeld1 = Float.parseFloat(beeld.getText());
  float lens1 = Float.parseFloat(vergroot.getText());
  float rekenvoorwerp = beeld1*lens1;
  voorwerp.setText(String.valueOf(rekenvoorwerp));
    }
  
  if (beel.equals(""))
  {
      float voor1 = Float.parseFloat(voorwerp.getText());
      float vergroot1 = Float.parseFloat(vergroot.getText());
      float rekenbeeld = voor1/vergroot1;
      beeld.setText(String.valueOf(rekenbeeld));
  }
  
  if (lens.equals(""))
 {
         float voor2 = Float.parseFloat(voorwerp.getText());
         float beeld2 = Float.parseFloat(beeld.getText());
         float rekenlens = voor2/beeld2;
         vergroot.setText(String.valueOf(rekenlens));
 }
     if (voorwe.equals("")) //voorwerpgrootte = beeldgrootte/vergroting
     {
         float beeldgrootte2 = Float.parseFloat(beeldgrootte.getText());
         float vergroot3 = Float.parseFloat(vergroot.getText());
         float berekenvoorwerp = beeldgrootte2/vergroot3;
         voorwerpgrootte.setText(String.valueOf(berekenvoorwerp));
     }
     
     if (beeldgr.equals("")) //beeldgrootte = voorwerpgrootte * vergroting
     {
         float voorwerpgrootte2 = Float.parseFloat(voorwerpgrootte.getText());
         float vergroot4 = Float.parseFloat(vergroot.getText());
         float berekenbeeldgrootte = voorwerpgrootte2*vergroot4;
         beeldgrootte.setText(String.valueOf(berekenbeeldgrootte));
     }
     
    //s=(1/v)+(1/b) 
    
    float voorwerpafstand4 = Float.parseFloat(voorwerp.getText());
    float beeldafstand4 = Float.parseFloat(beeld.getText());
    float lenssterkteformule = ((1/voorwerpafstand4)+(1/beeldafstand4));
    lenssterkte.setText(String.valueOf(lenssterkteformule));
    
     }
    
 }

 



ik voeg hier aan toe:
Java:
1
2
3
4
5
6
7
public class HorizontaleLijnen extends Applet {

    public void paint (Graphics g) {
            int y = 10, breedte = 320, hoogte = 240;
            g.drawLine(0, y, breedte, y);
                    
            }


dat zet ik dan BOVEN het ONDERSTE " } " teken.

wie kan mij helpen?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je moet ook geen extra Applet declareren. Je moet zelf een component schrijven en toevoegen of je moet de paint overidden in je hoofd Applet

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Zo maak je alleen de klasse. Je moet een object van die klasse nog toevoegen aan je Applet1 zoals bij regel 24, 26 ,28, 31 ... gebeurt. Ook is het handig om dat object op te staan in een veld zoals gebeurt met de andere dingen bij regel 66 t/m 78. Hier worden bij die andere componenten ook gelijk de objecten gemaakt.

Normaal maak je een Canvas waar al je tekenspul in komt. Volgens mij moet je HorizontaleLijnen-klasse niet "extends Applet", maar "extends Component" zijn, maar dat weet ik niet zeker. Ik maak nooit applets.

[ Voor 8% gewijzigd door Daos op 13-12-2005 17:33 ]


  • Opperhoof
  • Registratie: Mei 2003
  • Nu online
mm, ik snap jullie nog steeds niet echt.
welke code regels moet ik dan toevoegen om 1 simpele lijn toe te voegen?
een willekeurige lijn van (10, 10, 300, 10) ?

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Het begint zo wel een beetje op een scriptrequest te lijken. Dit staat gewoon in elk boek uitgelegd. Jouw uitgangspunt is niet goed. Je tekent de lijn namelijk niet. Hij wordt getekend (net zoals de Button, Label en TextField).
Daos schreef op dinsdag 13 december 2005 @ 17:30:
Je moet een object van die klasse nog toevoegen aan je Applet1 zoals bij regel 24, 26 ,28, 31 ... gebeurt.
op regel 57 bijvoorbeeld dit:
Java:
57
58
add(hl);
hl.setBounds(10,10,1000,1000);
Ook is het handig om dat object op te staan in een veld zoals gebeurt met de andere dingen bij regel 66 t/m 78. Hier worden bij die andere componenten ook gelijk de objecten gemaakt.
op regel 81 (was 79 maar er komen 2 bij van nieuwe regels bij regel 57) bijvoorbeeld dit:
Java:
81
HorizontaleLijnen hl= new HorizontaleLijnen();

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Voeg
Java:
1
2
3
4
public void paint (Graphics g) {
    int y = 10, breedte = 320, hoogte = 240; 
    g.drawLine(0, y, breedte, y); 
}

eens toe aan je Aplet1 class. Want je code om een lijn te tekenen is wel goed maar die wordt nergens aangeroepen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Opperhoof
  • Registratie: Mei 2003
  • Nu online
hehe, dat is dus wat ik zoch!

paint (Graphics g)

oftwel die code van jou ^^
maar het stukje code:
public class HorizontaleLijnen extends Applet {
was alleen niet nodig wat ik er wel bij had gedaan |:(

Anyway, ik kan weer even vooruit! dank u allen voor uw bijdragen, ook Daos is mijn held.

Verwijderd

hmz... ik zou ten eerste javax.swing componenten gebruiken ipv de java.awt componenten. Dit geeft meer functionaliteit (ook al heb je die hier niet nodig) en als ik het goed heb worden de awt componenten langzaam maar zeker weggehaald uit de java api. Verder zijn swing componenten minder gevoelig voor de verschillen van verschillende platformen, dus je hebt meer kans dat ze niet alleen op je windows bak, maar ook op linux, macos enz werken. Het beste kun je jezelf gewoon de swing componenten aanleren om latere problemen te voorkomen... Verder kun je ook beter wel een layout manager gebruiken, verschillende platformen hebben nl. verschillende pixel groottes, dus bestaat de kans dat je applet er prima uitziet op de ene, maar helemaal uit z'n verband gerukt op een andere machine...

Maar je probleem :)
als je een apart object wilt aanmaken voor je paint dingetjes, moet deze een JPanel (of Panel in awt, denk ik tenminste) extenden, niet Applet, want die bestaat immers al (je wilt geen Applet in een Applet). En de functie die rwd ook al beschrijft tekent de lijn voor je;
<code>
protected void paintComponent(Graphics g) {
super.paintComponent(g); // om te zorgen dat het canvas leeg is voor je begint met tekenen
g.setColor(Color.black);
g.drawLine(10, 10, 300, 10); //teken de lijn van punt [10, 10] naar [300, 10]
}
</code>

Als het nu niet lukt kun je het beste een boek kopen ;)

btw. in de java api kun je alles vinden, net als voor php php.net. Leer de api gebruiken, scheelt heel veel tijd. Er staan ook tutorials over van alles en nog wat...

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op dinsdag 13 december 2005 @ 20:16:
hmz... ik zou ten eerste javax.swing componenten gebruiken ipv de java.awt componenten. Dit geeft meer functionaliteit (ook al heb je die hier niet nodig) en als ik het goed heb worden de awt componenten langzaam maar zeker weggehaald uit de java api. Verder zijn swing componenten minder gevoelig voor de verschillen van verschillende platformen, dus je hebt meer kans dat ze niet alleen op je windows bak, maar ook op linux, macos enz werken. Het beste kun je jezelf gewoon de swing componenten aanleren om latere problemen te voorkomen... Verder kun je ook beter wel een layout manager gebruiken, verschillende platformen hebben nl. verschillende pixel groottes, dus bestaat de kans dat je applet er prima uitziet op de ene, maar helemaal uit z'n verband gerukt op een andere machine...

Maar je probleem :)
als je een apart object wilt aanmaken voor je paint dingetjes, moet deze een JPanel (of Panel in awt, denk ik tenminste) extenden, niet Applet, want die bestaat immers al (je wilt geen Applet in een Applet). En de functie die rwd ook al beschrijft tekent de lijn voor je;
<code>
protected void paintComponent(Graphics g) {
super.paintComponent(g); // om te zorgen dat het canvas leeg is voor je begint met tekenen
g.setColor(Color.black);
g.drawLine(10, 10, 300, 10); //teken de lijn van punt [10, 10] naar [300, 10]
}
</code>

Als het nu niet lukt kun je het beste een boek kopen ;)

btw. in de java api kun je alles vinden, net als voor php php.net. Leer de api gebruiken, scheelt heel veel tijd. Er staan ook tutorials over van alles en nog wat...
Op dit moment is het voor de TS denk helemaal niet belangrijk of hij Swing of AWT gebruikt. Het is eerst van belang dat de TS snapt hoe Java en OO in elkaar zit. Het grote probleem is dat mensen meteen op de GUI focussen maar nog totaal niet door hebben hoe programma's uberhaupt in elkaar steken. Als hij met swing had gewerkt had hij precies hetzelfde probleem gehad alleen dan had hij niet van Applet ge-extend maar van JApplet. Het belangrijkste is dat je eerst in de vingers hebt hoe een programma precies werkt.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1