Ik ben java aan het leren en ik kom een probleem tegen. Ik wilde een thermometer app. maken(celsius -> fahrenheit). In deze kleine app. kan je simpelweg het aantal graden intypen en deze berekent dan de uitkomst. Deze heb ik in 1 file gemaakt, daar loopt het goed. Maar zodra ik de classes apart wil zetten, krijg ik een error met empty string. Waarom krijg ik deze melding en hoe kan ik deze oplossen? Want het lijkt net of de 'invoerVak' niks kan uitlezen?!
Ik heb ook comments erbij gezet om het voor mij duidelijk te maken wat ik doen
, als ik hier en daar fouten heb gemaakt plz let me know. Dan leer ik het tenminste niet verkeerd! 
Ik maak de apps in Eclipse, os win xp. Op java 1.6
Deze doet het:
En nu de aparte classes, hier krijg ik een empty string:
Ik heb ook comments erbij gezet om het voor mij duidelijk te maken wat ik doen
Ik maak de apps in Eclipse, os win xp. Op java 1.6
Deze doet het:
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
| import javax.swing.*; import java.awt.event.*; import java.awt.*; //maak class TH aan en maak het een 'verlengstuk' van de class JFrame @SuppressWarnings("serial") public class Test2 extends JFrame{ //methode beschrijft hoe de gedragingen worden uitgevoerd //is een groepje bij elkaar horende opdrachten public static void main(String[] args){ //maak een object van de klasse JFrame frame = new Test2(); frame.setSize(400, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("Thermometer"); frame.setContentPane(new ThermometerPaneel()); frame.setVisible(true); } } @SuppressWarnings("serial") class ThermometerPaneel extends JPanel { //Ik wil dit object gebruiken met de naam .. public JTextField invoerVak; private JButton knop; private JLabel invoerLabel; public String mededeling; public ThermometerPaneel(){ setLayout(null); //layout manager uitschakelen invoerVak = new JTextField(10); //maak tekstvak aan invoerVak.setHorizontalAlignment(JTextField.LEFT); //zet hem links invoerVak.setBounds(10, 20, 90, 20); //coordinaten invoerLabel = new JLabel("Celcius"); invoerLabel.setHorizontalAlignment(JLabel.RIGHT); invoerLabel.setBounds(72, 20, 90, 20); mededeling = "0 Fahrenheit"; //Deze string heeft de tekst knop = new JButton("Convert"); knop.setHorizontalAlignment(JButton.LEFT); knop.addActionListener(new CelsiusHandler()); knop.setBounds(10, 50, 90, 20); add(invoerVak); add(invoerLabel); add(knop); } public void paintComponent(Graphics g){ super.paintComponents(g); g.drawString(mededeling, 120, 67); } class CelsiusHandler implements ActionListener { public void actionPerformed(ActionEvent e) { String invoer = invoerVak.getText(); double celsius = Double.parseDouble(invoer); if(!invoerVak.equals("")){ double fahrenheit = celsius * 1.8 + 32; mededeling = "" + fahrenheit + " fahrenheit"; } else{ mededeling = "Voer een getal in"; } repaint(); } } } |
En nu de aparte classes, hier krijg ik een empty string:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| import javax.swing.*; //maak class TH aan en maak het een 'verlengstuk' van de class JFrame @SuppressWarnings("serial") public class Thermometer extends JFrame{ //methode beschrijft hoe de gedragingen worden uitgevoerd //is een groepje bij elkaar horende opdrachten public static void main(String[] args){ //maak een object van de klasse JFrame frame = new Thermometer(); frame.setSize(400, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("Thermometer"); frame.setContentPane(new ThermometerPaneel()); frame.setVisible(true); } } |
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
| import javax.swing.*; import java.awt.*; @SuppressWarnings("serial") public class ThermometerPaneel extends JPanel { //Ik wil dit object gebruiken met de naam .. JTextField invoerVak; private JButton knop; private JLabel invoerLabel; String mededeling; public ThermometerPaneel(){ setLayout(null); //layout manager uitschakelen invoerVak = new JTextField(10); //maak tekstvak aan invoerVak.setHorizontalAlignment(JTextField.LEFT); //zet hem links invoerVak.setBounds(10, 20, 90, 20); //coordinaten invoerLabel = new JLabel("Celcius"); invoerLabel.setHorizontalAlignment(JLabel.RIGHT); invoerLabel.setBounds(72, 20, 90, 20); mededeling = "0 Fahrenheit"; //Deze string heeft een tekst knop = new JButton("Convert"); knop.setHorizontalAlignment(JButton.LEFT); knop.addActionListener(new CelsiusHandler()); knop.setBounds(10, 50, 90, 20); add(invoerVak); add(invoerLabel); add(knop); } public void paintComponent(Graphics g){ super.paintComponents(g); g.drawString(mededeling, 120, 67); } } |
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| import java.awt.event.*; class CelsiusHandler implements ActionListener { public void actionPerformed(ActionEvent e) { ThermometerPaneel th = new ThermometerPaneel(); //double fahrenheit; String invoer = th.invoerVak.getText(); double celsius = Double.parseDouble(invoer); //Als deze niet gelijk is aan een lege string if(!th.invoerVak.equals("")){ double fahrenheit = celsius * 1.8 + 32; th.mededeling = "" + fahrenheit + " fahrenheit"; } else{ th.mededeling = "Voer een getal in"; } th.repaint(); } } |
GöÐ, ®Ë§þËÇT åñÐ Höñöµ® | LÜ©K>SkïLL | XT®ËËM|®åGË ||Funky Monkeys || Fm