Moderators Dragos Posted July 2, 2014 Moderators Report Posted July 2, 2014 (edited) Mai jos e un proiect pe care l-am scris in graba ca exemplu pentru colegii de la faculta care nu stiu sa lucreze cu interfete grafice. package exemplu;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.SwingUtilities;class Interfata extends JFrame implements ActionListener{ //Declaram obiectele (variabilele) la inceput inainte //de constructor pentru a le putea utiliza in alte metode JTextField camp,camp2; //Constructorul principal Interfata() { //setam titlul ferestrei setTitle("Exemplu interfata"); //setam lungimea (340px) si inaltimea (200px) ferestrei setSize(340, 200); //setari pentru fereastra setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); //preluam fereastra in variabila container pentru a putea lucra pe ea JPanel container = (JPanel) getContentPane(); container.setLayout(null); //creem un nou label (text) pe fereastra JLabel intro = new JLabel(); //adaugam un text label-ului creat intro.setText("Text 1:"); //setam zona unde va fi afisat si dimensiunile /* Setarile sunt in felul urmator: setBounds(A,B,C,D) unde A = numarul de pixeli fata de stanga B = numarul de pixeli fata de sus C = numarul de pixeli in lungime D = numarul de pixeli in inaltime */ intro.setBounds(10, 15, 50, 22); //adaugam label-ul in fereastra container.add(intro); //Creem un chenar de scris in program, precompletat cu textul "Continut camp 1" camp = new JTextField("Continut camp 1"); camp.setBounds(60,15,270,22); container.add(camp); //Creem un alt label JLabel intro2 = new JLabel(); intro2.setText("Text 2:"); intro2.setBounds(10, 45, 50, 22); container.add(intro2); //Creem un alt camp de scris camp2 = new JTextField("Continut camp 2"); camp2.setBounds(60,45,270,22); container.add(camp2); //Creem un buton pe care scrie Buton 1 JButton go = new JButton("Buton 1"); go.setBounds(10,75,100,22); container.add(go); //Cu metoda asta adaugam un Listener (o functie) butonului, am explicat mai jos go.addActionListener(this); //Creem un buton pe care scrie Buton 2 JButton go2 = new JButton("Buton 2"); go2.setBounds(120,75,100,22); container.add(go2); go2.addActionListener(this); //Creem un buton pe care scrie Buton 3 JButton go3 = new JButton("Buton 3"); go3.setBounds(230,75,100,22); container.add(go3); go3.addActionListener(this); //Creem un mic copyright JLabel cp = new JLabel(); cp.setText("Copyright 2014 Xulescu Ion"); cp.setBounds(10, 110, 200, 22); container.add(cp); } //Mai jos este metoda pentru adaugarea de functii butoanelor public void actionPerformed(ActionEvent e) { //Daca am apasat pe Buton 1 (se verifica cu textul de pe buton) if(e.getActionCommand()=="Buton 1") { //Asta e un simplu alert/popup JOptionPane.showMessageDialog(null, "Ai apasat butonul 1."); } //Daca am apasat pe Buton 2 if(e.getActionCommand()=="Buton 2") { //Aici am facut un alert cu un text pe doua randuri, separandu-le prin \n //pe randul al doilea am preluat continutul variabilei camp //NU se poate lua continutul daca variabila nu este declarata superior metodei acesteia (spre ex daca e declarata in constructor) //pentru a afisa continutul, folosim metoda getText() JOptionPane.showMessageDialog(null, "Ai apasat butonul 2.\nTextul din campul 1 este: " + camp.getText()); } //Daca am apasat pe Buton 3 if(e.getActionCommand()=="Buton 3") { //In acest caz am concatenat (lipit) textele din primele doua campuri //Am inceput prin initializarea unei variabile de tip StringBuffer StringBuffer concatenare = new StringBuffer(); //Am adaugat continutul din camp si camp2 variabilei concatenare utilizand metoda append() concatenare.append(camp.getText()); concatenare.append(camp2.getText()); //Am afisat rezultatul, alaturi de lungime. In acest caz am folosit metoda length() JOptionPane.showMessageDialog(null, "Ai apasat butonul 3.\nTextele din camp si camp2 impreuna formeaza stringul '" + concatenare.toString() + "' care are lungimea " + concatenare.length()); } } //Main-ul public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { Interfata interfata = new Interfata(); interfata.setVisible(true); } }); } } Edited July 2, 2014 by Dragos 1 Quote
M2G Posted July 2, 2014 Report Posted July 2, 2014 Recomand sa declari butoanele tot la nivel de clasa ca si campuri. (la fel cum ai facut cu acel JTextField)Dupa care o sa poti sa verifici efectiv ce buton sa apasat si sa scapi de acele getActionCommand(). In momentul de fata daca schimbi numele butonului nu o sa iti mai faca nimic daca apesi pe el. Din cauza asta mai bine folosesti getSource() din clasa ActionEvent pentru a returna efectiv obiectul(butonul) pe care sa apasat. //Mai jos este metoda pentru adaugarea de functii butoanelor public void actionPerformed(ActionEvent e) { //Daca am apasat pe Buton 1 (se verifica cu textul de pe buton) if(e.getSource() == go) { //Asta e un simplu alert/popup JOptionPane.showMessageDialog(null, "Ai apasat butonul 1."); } //Daca am apasat pe Buton 2 if(e.getSpource() == go2) { //Aici am facut un alert cu un text pe doua randuri, separandu-le prin \n //pe randul al doilea am preluat continutul variabilei camp //NU se poate lua continutul daca variabila nu este declarata superior metodei acesteia (spre ex daca e declarata in constructor) //pentru a afisa continutul, folosim metoda getText() JOptionPane.showMessageDialog(null, "Ai apasat butonul 2.\nTextul din campul 1 este: " + camp.getText()); } //Daca am apasat pe Buton 3 if(e.getSource() == go3) { //In acest caz am concatenat (lipit) textele din primele doua campuri //Am inceput prin initializarea unei variabile de tip StringBuffer StringBuffer concatenare = new StringBuffer(); //Am adaugat continutul din camp si camp2 variabilei concatenare utilizand metoda append() concatenare.append(camp.getText()); concatenare.append(camp2.getText()); //Am afisat rezultatul, alaturi de lungime. In acest caz am folosit metoda length() JOptionPane.showMessageDialog(null, "Ai apasat butonul 3.\nTextele din camp si camp2 impreuna formeaza stringul '" + concatenare.toString() + "' care are lungimea " + concatenare.length()); } }In felul asta ti se returneaza o referinta la butonul efectiv si poti sa folosesti asta si pentru a schimba textul butonului, o icoana atasata butonului etc...Poti sa setezi explicit pe butoane un action command cu metoda go1.setActionCommad() din cate tin minte. Si asta poti sa folosesti daca vrei ca un buton sa faca mai mult de o singura operatie. Setezi prin program diferite stari si pe urma poti sa procesezi acele stari dupa ce ai verificat pe ce buton ai apasat. Deci dupa ce faci getSource() o sa poti face if (e.getActionCommand == "unlock") { // ceva actiune pt unlock}else if (e.getActionCommand == "lock") { //actiune pentru lock} Quote
parazitul29 Posted July 3, 2014 Report Posted July 3, 2014 Cand programezi in swing incearca sa folosesti un layout manager daca nu folosesti un layout nu ai cine stie ce portabilitate pe alte sisteme si ar mai fi chestia ca daca vrei sa modifici ceva e mai usor daca ai un layout. La ce faci swing in facultate?La poo? Quote
Moderators Dragos Posted July 7, 2014 Author Moderators Report Posted July 7, 2014 Cand programezi in swing incearca sa folosesti un layout manager daca nu folosesti un layout nu ai cine stie ce portabilitate pe alte sisteme si ar mai fi chestia ca daca vrei sa modifici ceva e mai usor daca ai un layout. La ce faci swing in facultate?La poo?Mersi de sfat. Programarea calculatoarelor si limbaje de programare: http://repo.dragosgaftoneanu.com/IESC/Anul%20I/PCLP-2/PCLP2_-_Indrumar_de_laborator%281%29.pdf Quote