Jump to content
Dragos

[Java] Exemplu program cu interfata grafica (JFrame)

Recommended Posts

  • Moderators
Posted (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 by Dragos
  • Upvote 1
Posted

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}

Posted

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?

  • Moderators
Posted
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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...