Itt miért nem egyértelmű a fordítónak, hogy én mire gondoltam? (Java)
Egy Java alkalmazáson dolgozok aminek annyi a lényege, hogy kéz szövegdobozba be kell írni egy téglalap két oldalának hosszát, majd egy gombra kattintani, mire a gép a másik két szövegmezőbe írja az eredményt. Két fájlból áll, bemásolom mindkettőt.
//teglalapFrame.java
import javax.swing.*;
import java.awt.*;
class teglalapFrame extends JFrame{
teglalapEvent tegl=new teglalapEvent(this);
//A bal oszlop
JPanel leftPanel=new JPanel();
JTextField aField=new JTextField("0");
JLabel aLabel=new JLabel("a oldal: ");
JTextField bField=new JTextField("0");
JLabel bLabel=new JLabel("b oldal: ");
JButton okButton=new JButton("Szamolj!");
GridLayout grid=new GridLayout(2,2);
//A jobb oszlop
JPanel rightPanel=new JPanel();
JTextField tField=new JTextField("0");
JLabel tLabel=new JLabel("terulet: ");
JTextField kField=new JTextField("0");
JLabel kLabel=new JLabel("kerulet: ");
GridLayout grid2=new GridLayout(2,2);
GridLayout overall=new GridLayout(1,2);
public teglalapFrame(){
super("TeglalapFrame");
leftPanel.setLayout(grid);
leftPanel.add(aLabel);
leftPanel.add(aField);
leftPanel.add(bLabel);
leftPanel.add(bField);
leftPanel.add(okButton);
add(leftPanel);
okButton.addActionListener(tegl);
rightPanel.setLayout(grid2);
rightPanel.add(tLabel);
rightPanel.add(tField);
rightPanel.add(kLabel);
rightPanel.add(kField);
kField.setEditable(false);
tField.setEditable(false);
add(rightPanel);
setLayout(overall);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args){
teglalapFrame frame=new teglalapFrame();
}
}
//teglalapEvent.java
import javax.swing.*;
import java.awt.event.*;
import java.lang.Integer;
public class teglalapEvent implements ActionListener{
teglalapFrame gui;
public teglalapEvent(teglalapFrame in){
gui=in;
}
public void actionPerformed(ActionEvent event){
area();
ference();
}
public void area(){
String a_side=gui.leftPanel.aField.getText();
int a=Integer.parseInt(a_side);
String b_side=gui.leftPanel.bField.getText();
int b=Integer.parseInt(b_side);
int ar=a*b;
String ar_str=Integer.toString(ar);
gui.rightPanel.tField.setText(ar_str);
}
public void ference(){
String a_side=gui.leftPanel.aField.getText();
int a=Integer.parseInt(a_side);
String b_side=gui.leftPanel.bField.getText();
int b=Integer.parseInt(b_side);
int fer=2*(a+b);
String fer_str=Integer.toString(fer);
gui.rightPanel.kField.setText(ker_str);
}
}
A setText()-es illetve getText()-es részeknél cannot find symbol hibát dob a fordító. Angol nyelven olvastam erről a hibáról, és azt hámoztam ki, hogy akkor jön elő, ha nem elég egyértelmű, hogy mit kérünk a géptől. Pedig szerintem ez teljesen egyértelmű. Mi itt a hiba szerintetek és hogyan hárítsam el? Előre is köszi. (Java JDK 1.7-em van)
Bocs amiért olyan hosszú lett.
Például itt: gui.leftPanel.aField.getText();
A probléma az, hogy a leftPanel-nek nincsen aField nevű adattagja.
A leftPanel.add(aField) meghívásával nem adattag jön létre, hanem a leftPanel reprezentációban egy kollekcióban helyet kap az aField referenciája.
Ahogy #1 is írta gui.aField lesz a helyes hivatkozás.
Egyébként offtopic javaslat: érdemes megszokni Java-ban a nagybetűs osztályneveket, pl. teglalapFrame helyett TeglalapFrame. :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!