Sunteți pe pagina 1din 18

smaranda.belciug@inf.ucv.ro Laborator 8 JSwing JFrame JFrame-ul este o fereastr independent care funcioneaz ca fereastra principal a unei aplicaii.

Programul principal declar o variabil de tip JFrame.


JFrame window = new JFrame("GUI Test");

Parametrul GUI test specific titlul ferestrei. Linia de cod de mai sus creeaz o fereastr i att. Fereastra nu este nc vizibil pe ecran.
window.setContentPane(content); window.setSize(250,100); window.setLocation(100,100); window.setVisible(true);

Componente de baz O interfa utilizator folosete componente GUI precum butoane, bare de derulare (scroll bars), casete de text (text-input boxes) i meniuri. Cel mai simplu element, un buton, un JButton de fapt, tie s se deseneze singur i s proceseze evenimente de mouse, tastatur i focus. Nu ne intereseaz un buton dect n momentul n care l declanm fcnd click pe el sau apsnd tasta spaiu (dac butonul are input focus). n momentul acela, obiectul JButton creeaz un obiect eveniment care aparine clasei java.awt.event.ActionEvent. Obiectul eveniment este trimis listener-ilor pentru a le comunica faptul c butonul a fost apsat. Componentele standard sunt definite de subclasele clasei JComponent, care este o subclas a clasei Component (include clasa JPanel). Multe metode folositoare sunt definite n clasele Component i JComponent i deci pot fi folosite la orice component Swing. S presupunem c variabila comp refer un JComponent. Urmtoarele metode pot fi folosite: comp.getWidth(), comp.getHeight() sunt funcii care returneaz mrimea componentei n pixeli. Atenie: cnd o component este creat, mrimea sa este zero. Mrimea va fi setat ulterior de un layout manager. comp.setEnabled(true), comp.setEnabled(false) pot fi folosite pentru a activa sau dezactiva componenta. Exist i o funcie boolean: comp.isEnabled() pe care o putem apela pentru a vedea dac o component este sau nu activat. comp.setVisible(true), comp.setVisible(false) pot fi folosite pentru a ascunde sau a afia componenta.

smaranda.belciug@inf.ucv.ro comp.setFont(font) seteaz fontul care va fi folosit pentru afiarea textului de pe component. comp.setBackground(color), comp.setForeground(color) seteaz backgroundul i foreground-ul componentei. comp.setOpaque(true) spune componentei c aria ocupat de component trebuie s aib aceeai culoare ca i culoarea de background a componentei, nainte de a se desena coninutul componentei. comp.setToolTipText(string) seteaz un string ca i tool tip pentru component. Tool tip-ul este afiat atunci cnd cursorul mouse-ului este pe component i nu este micat pentru cteva secunde. Tool tip-ul d informaii despre component i despre cum ar trebui folosit. comp.setPreferredSize(size) seteaz mrimea dorit a componentei. Parametrul este de tip java.awt.Dimension, unde un obiect de tip Dimension are dou variabile de tip ntreg, width i height. Apelarea ei este: setPreferredSize(new Dimension(100,50)).

Folosirea unei componente este un proces n mai muli pai. Obiectul component trebuie nti creat de un constructor. Apoi trebuie adugat ntr-un container. n majoritatea cazurilor, un listener trebuie nregistrat s rspund la evenimentele produse de component, i n unele cazuri o referin la acea component trebuie s fie salvat ntr-o variabil de instan, astfel nct componenta s fie manipulat de program dup ce a fost creat. JButton Constructori: JButton are un constructor cu un string ca parametru. String-ul devine textul afiat pe buton. De exemplu: stopGoButton = new JButton(Go). Butonul trebuie adugat unui container. Evenimente: Cnd un utilizator face click pe un buton, butonul genereaz un eveniment de tip ActionEvent. Acest eveniment este trimis la un listener care este nregistrat ca i un ActionListener pe acel buton. Listeners: Un obiect care dorete s trateze evenimente generate de butoane trebuie s implementeze interfaa ActionListener. Aceast interfa definete o singur metod public void actionPerformed(ActionEvent evt), care este apelat pentru a anun prezena unui action event obiectului. Registration of Listeners: pentru a primi o notificare de existen unui eveniment, un ActionListener trebuie s se nregistreze. Acest lucru se face astfel: stopGoButton.addActionListener(buttonHandler); Metode eveniment: Cnd actionPerformed(evt) este apelat de ctre buton, parametrul, evt, conine informaii despre eveniment. Aceast informaie poate fi preluat prin apelarea metodelor din clasa ActionEvent. De exemplu, evt.getActionCommand() returneaz un String, care conine textul care este afiat pe buton. Este posibil s se seteze i alte valori. Metoda evt.getSource() returneaz o referin a obiectului care a produs evenimentul. Valoarea returnat este de tip Object nu JButton.

smaranda.belciug@inf.ucv.ro JLabel JLabel este cea mai simpl component. Un obiect de tip JLabel afieaz o linie de text. Textul nu poate fi editat de utilizator.
JLabel message = new JLabel("Hello World!");

JCheckBox Un JCheckBox este o component care are dou stri: selected i unselected. Utilizatorul schimb starea unui check box fcnd click pe el. Starea checkbox-ului este reprezentat de o valoarea boolean (true dac este selectat, false invers). Checkbox-ul are o etichet, care este specificat n momentul n care este construit.
JCheckBox showTime = new JCheckBox("Arat ora exacta");

Pentru a afla starea unui checkbox trebuie apelat metoda isSelected(). De exemplu, dac avem dou checkbox-uri cb1 i cb2, i dorim s tim care dintre ele a generat un eveniment, atunci metoda noastr actionPerformed() ar putea arta astfel:
public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if (source == cb1) { boolean newState = cb1.isSelected(); ... // raspunde la schimbarea starii } else if (source == cb2) { boolean newState = cb2.isSelected(); ... // raspunde la schimbarea starii }

JTextField i JTextArea Clasele JTextField i JTextArea sunt componente care conin text ce poate fi editat de utilizator. Un JTextField are o singur linie text, pe cnd JTextArea poate s aib mai multe linii text. Se pot seta ambele s fie read-only, atunci utilizatorul poate doar s citeasc textul, nu s-l i editeze. Ambele clase sunt subclase ale clasei abstracte JTextComponent. setText() primete un parametru String, i este folosit pentru a schimba textul afiat ntr-o component input. getText() returneaz textul din component, valoare de tip String. setEditable(false) - utilizatorul nu o s mai poat s modifice textul. Utilizatorul poate s scrie n component doar cnd are input focus. Utilizatorul poate s dea input focus unei componente text fcnd click pe ea, dar cteodat este folositor s se dea din program input focus. De ce? Pentru a atrage atenia utilizatorului c a greit cnd a completat un cmp text. Se folosete metoda requestFocus().

smaranda.belciug@inf.ucv.ro Clasa JTextField are un constructor public JTextField(int columns), unde columns este un ntreg care specific numrul de caractere care trebuie s fie vizibile.
public JTextField(String contents); public JTextField(String contents, int columns);

Constructorii pentru un JTextArea sunt:


public public public public JTextArea() JTextArea(int rows, int columns) JTextArea(String contents) JTextArea(String contents, int rows, int columns)

Dac avem un text area, exist sana s nu putem vedea tot textul i s avem nevoie de un scroll bar. Din pacte acest lucru nu se ntmpl automat. Pentru a avea un scroll bar ntr-un text area, trebuie s punem JTextArea ntr-o alt component JScrollPane.
JTextArea inputArea = new JTextArea(); JScrollPane scroller = new JScrollPane( inputArea );

JTextField are o subclas JPasswordField, care este identic, doar c nu afieaz textul. JComboBox Clasa JComboBox permite utilizatorului s selecteze o opiune dintr-o list de opiuni.
JComboBox colorChoice = new JComboBox(); colorChoice.addItem("Red"); colorChoice.addItem("Blue"); colorChoice.addItem("Green"); colorChoice.addItem("Black");

Pentru a afla obiectul selectat se poate folosi metoda getSelectItem(), care returneaz un Object sau getSelectedIndex(), care returneaza un ntreg. Pentru a seta o opiune se folosete metoda getSelectedIndex(n), unde n este un ntreg care d poziia item-ului care dorim s-l selectm. JSlider Un JSlider permite utilizatorului s selecteze o valoare ntreag dintr-o mulime de valori.
import java.awt.*; import javax.swing.*; import javax.swing.event.*; public class SliderDemo extends JApplet implements ChangeListener { JSlider slider1, slider2, slider3; // slider-ele.

smaranda.belciug@inf.ucv.ro

JLabel label; //O eticheta pentru raportarea modificarilor valorilor

public void init() { getContentPane().setLayout(new GridLayout(4,1)); label = new JLabel("Incearca sa modifici valoarea!", JLabel.CENTER); getContentPane().add(label); slider1 = new JSlider(0,10,0); slider1.addChangeListener(this); getContentPane().add(slider1); slider2 = new JSlider(); slider2.addChangeListener(this); slider2.setMajorTickSpacing(25); slider2.setMinorTickSpacing(5); slider2.setPaintTicks(true); getContentPane().add(slider2); slider3 = new JSlider(2000,2100,2006); slider3.addChangeListener(this); slider3.setLabelTable(slider3.createStandardLabels(50)); slider3.setPaintLabels(true); getContentPane().add(slider3); } // end init()

public void stateChanged(ChangeEvent evt) { if (evt.getSource() == slider1) label.setText("Slider-ul s-a mutat la " + slider1.getValue()); else if (evt.getSource() == slider2) label.setText("Slider-ul s-a mutat la " + slider2.getValue()); else if (evt.getSource() == slider3) label.setText("Slider-ul s-a mutat la " + slider3.getValue()); } }

smaranda.belciug@inf.ucv.ro

Aici, cel de-al doilea slider este decorat cu liniue pentru marcaj, iar slider-ul numrul 3 cu etichete. Constructorul are ca parametri valoarea minima i maxim i valoarea de start. Dac sunt omise valorile sunt 0, 100 i 50.
public JSlider(int minimum, int maximum, int value)

Poziia default este orizontal, dar pentru a avea un JSlider vertical se folosete setOrientation(JSlider.VERTICAL). Spre deosebire de alte componente, un JSlider nu genereaz un ActionEvent. n schimb genereaz un eveniment de tip ChangeEvent. ChangeEvent se afl n pachetul javax.swing.event. Trebuie implementat interfaa ChangeListener i trebuie nregistrat un change listener prin apelarea metodei addChangeListener(). Un public void ChangeListener trebuie s defineasc metoda stateChanged(ChangeEvent evt). Pentru a desena diviziuni pe slider trebuie s folosim metodele setMinorTickSpacing(i) i/sau setMajosTickSpacing(i), unde i reprezint numrul de uniti. Apoi trebuie apelat i metoda setPaintTicks(true). Layout-uri de baz Aspectul unui GUI ine foate mult de modul de aranjare a componentelor pe ecran (layout). Unele componente de GUI sunt containere, adic pot s conin alte componente. Containerele n Java sunt obiecte care aparin subclasei java.awt.Container. De exemplu, JPanel este un container. Deoarece JPanel este i o component, se poate aduga un JPanel n alt JPanel. Layout-ul poate fi fcut de voi, dar mai bine folosii un layout manager. Un layout manager este un obiect asociat cu un container care implementeaz o anumit politic de aranjare a componentelor n container. Fiecare container are o metoda de instan, setLayout(), care primete ca parametru un obiect de tip de LayoutManager.

smaranda.belciug@inf.ucv.ro Tipuri de layout BorderLayout

BoxLayout

CardLayout modific interfaa n funcie de ce componente trebuie afiate

FlowLayout

smaranda.belciug@inf.ucv.ro GridBagLayout

GridLayout

GroupLayout

smaranda.belciug@inf.ucv.ro SpringLayout

Borders Dac dorim s adugm margini diferitelor componente din container trebuie s folosim obiecte de tip Border. Clasa javax.swing.BorderFactory conine metode pentru construirea de margini.
import java.awt.*; import javax.swing.*; import javax.swing.border.Border; /** * Un JApplet simplu care arata diferite tipuri de margini. * */ public class BorderDemo extends JApplet { JPanel content; // Panelul care il vom folosi public void init() { content = new JPanel(); content.setBackground(Color.LIGHT_GRAY); content.setLayout( new GridLayout(0,1,7,7) ); content.setBorder(BorderFactory.createEmptyBorder(7,7,7,7)); make(BorderFactory.createLineBorder(Color.RED,2), "BorderFactory.createLineBorder(Color.RED,2)"); make(BorderFactory.createMatteBorder(2,2,5,5,Color.RED), "BorderFactory.createMatteBorder(2,2,5,5,Color.RED)"); make(BorderFactory.createEtchedBorder(), "BorderFactory.createEtchedBorder()"); make(BorderFactory.createRaisedBevelBorder(), "BorderFactory.createRaisedBevelBorder()"); make(BorderFactory.createLoweredBevelBorder(), "BorderFactory.createLoweredBevelBorder()"); make(BorderFactory.createTitledBorder("Title Goes Here"), "BorderFactory.createTitledBorder(\"Title Goes Here\")"); setContentPane(content); } /**

smaranda.belciug@inf.ucv.ro
* Metoda ce creeaza o eticheta care afiseaza string-ul cu * marginea specificata. Eticheta este opaca si o sa aiba ca * background un gri deschis. */ void make(Border border, String command) { JLabel label = new JLabel(command, JLabel.CENTER); label.setBackground(Color.lightGray); label.setOpaque(true); label.setBorder(border); content.add(label); }

} // end class

Exemplu. Avem un JApplet care conine nite slidere care controleaz background-ul i foreground-ul unei etichete, iar un combo box controleaz font-ul.
import import import import import java.awt.Color; java.awt.Font; java.awt.GridLayout; java.awt.event.ActionEvent; java.awt.event.ActionListener;

import javax.swing.JApplet; import javax.swing.JComboBox; import javax.swing.JFrame;

10

smaranda.belciug@inf.ucv.ro
import import import import import javax.swing.JLabel; javax.swing.JPanel; javax.swing.JSlider; javax.swing.event.ChangeEvent; javax.swing.event.ChangeListener;

public class SliderAndComboBoxDemo extends JApplet { /** * Rutina main deschide o fereastra care afiseaza un panel de tip * ContentPanel. ContentPanel este o clasa interna. Rutina main() * foloseste metoda pack() din JFrame pentru a face ca marimea ContentPane;-ului * sa fie egala cu marimea preferata. */ public static void main(String[] args) { JFrame window = new JFrame("Layout Demo"); ContentPanel content = new ContentPanel(); window.setContentPane(content); window.pack(); window.setLocation(100,100); window.setResizable(false); window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); window.setVisible(true); } /** * Metoda init() a applet-ului folosete un panel de tip ContentPane */ public void init() { setContentPane( new ContentPanel() ); } /** * Aceasta clasa interna defineste un JPanel care contine toate * cele patru componente (o eticheta cu mesajul "Wow.. uber cool :D!", * un combo box care permite utilizatorului sa aleaga stilul fontului, * si un slider care schimba culoarea din background-ului etichetei, * si un alt slider care schimba foreground-ul etichetei. */ public static class ContentPanel extends JPanel implements ActionListener, ChangeListener{ // Componentele care vor fi afisate in JPanel private JLabel displayLabel; private JComboBox fontStyleSelect; private JSlider bgColorSlider, fgColorSlider; /** * Constructorul care creeaza componentele, seteaza listeners si * adauga componentele in panel */

11

smaranda.belciug@inf.ucv.ro
public ContentPanel() { /* Creeaza slider-erele si seteaza panelul sa asculte * dupa ChangeEvents care vor fi generate de slidere * */ bgColorSlider = new JSlider(0,255,100); bgColorSlider.addChangeListener(this); fgColorSlider = new JSlider(0,255,200); fgColorSlider.addChangeListener(this); /* Creeaza un combo box si adauga patru item-uri care reprezinta * stiluri diferite. Seteaza panelul sa asculte dupa ActionEvents * provenite de la combo box. * */ fontStyleSelect = new JComboBox(); fontStyleSelect.addItem("Plain Font"); fontStyleSelect.addItem("Italic Font"); fontStyleSelect.addItem("Bold Font"); fontStyleSelect.addItem("Bold Italic Font"); fontStyleSelect.setSelectedIndex(2); fontStyleSelect.addActionListener(this); /* Creeaza eticheta astfel incat sa arate exact cum este setata * din slidere si combo box */ displayLabel = new JLabel("Wow.. uber cool :D!", JLabel.CENTER); displayLabel.setOpaque(true); displayLabel.setBackground( new Color(100,100,100) ); displayLabel.setForeground( new Color(255, 200, 200) ); displayLabel.setFont( new Font("Serif", Font.BOLD, 30) ); /* Seteaza layout-ul panelului si adauga patru componente * Se foloseste layout-ul GridLayout cu 4 linii si o coloana **/ setLayout(new GridLayout(4,1)); add(displayLabel); add(bgColorSlider); add(fgColorSlider); add(fontStyleSelect); } // end constructor /** * Metoda va fi apela cand utilizatorul va schimba selectia din * combo box. * */ public void actionPerformed(ActionEvent evt) { switch ( fontStyleSelect.getSelectedIndex() ) { case 0: displayLabel.setFont( new Font("Serif", Font.PLAIN, 30) );

12

smaranda.belciug@inf.ucv.ro
break; case 1: displayLabel.setFont( new Font("Serif", Font.ITALIC, 30) ); break; case 2: displayLabel.setFont( new Font("Serif", Font.BOLD, 30) ); break; case 3: displayLabel.setFont( new Font("Serif", Font.BOLD + Font.ITALIC, 30) ); break; } } /** * Metoda este apelata cand valoarea oricarui slider este schimbata */ public void stateChanged(ChangeEvent evt) { if (evt.getSource() == bgColorSlider) { int bgVal = bgColorSlider.getValue(); displayLabel.setBackground( new Color(bgVal,bgVal,bgVal) ); //culoarea va fi o nuanta de gri } else { int fgVal = fgColorSlider.getValue(); displayLabel.setForeground( new Color( 255, fgVal, fgVal) ); // culoare poate fi de la rosu pana la alb } } } // end nested class ContentPane } // end class SliderAndComboBoxDemo

13

smaranda.belciug@inf.ucv.ro Menu i Dialog Menu i MenuBar Meniurile sunt foarte uor de folosit n Java. Item-urile dintr-un meniu sunt reprezentate de clasa JMenuItem (se gsete n pachetul javax.swing). Item-urile se folosesc n acelai mod ca butoanele. De fapt, JMenuItem i JButton sunt subclasele clasei AbstractButton.
JMenuItem fillCommand = new JMenuItem("Fill");

Singura diferen dintre un item de meniu i un buton este aceea c un item de meniu trebuie s apar ntr-un meniu i nu ntr-un panel. Un meniu un Java este reprezentat de clasa JMenu. Un JMenu are un nume, care este specificat n constructor, i o metoda add(JMenuItem) care este folosit pentru a aduga JMenuItem la meniu.
JMenu toolsMenu = new JMenu("Tools"); de Tools // creeaza un meniu cu numele

JMenuItem drawCommand = new JMenuItem("Draw"); de meniu drawCommand.addActionListener(listener); listener la acel item. toolsMenu.add(drawCommand); meniu. JMenuItem eraseCommand = new JMenuItem("Erase"); eraseCommand.addActionListener(listener); toolsMenu.add(eraseCommand);

// Creeaza un item // adauga un

// adauga itemul la

Dup ce am creat un meniu trebuie s-l adugm la o bar de meniu. O bar de meniu este reprezentat de clasa JMenuBar. O bar de meniu este un container pentru meniuri.
JMenuBar menuBar = new JMenuBar(); menuBar.add(controlMenu); menuBar.add(colorMenu); menuBar.add(toolsMenu)

Pentru a aduga o bar de meniuri ntr-un JApplet sau un JFrame trebuie s folosim metoda setMenuBar(JMenuBar). Bara de meniu nu trebuie s fie continut de un content pane. Dialogs Un dialog, sau un dialog box, este o fereastr care este folosit pentru o scurt interaciune cu utilizatorul. Afiarea unui mesaj Selectarea unui fisier pentru a fi deschis Selectarea unei culori

14

smaranda.belciug@inf.ucv.ro In Swing, un dialog box este reprezentat de un obiect care aparine clasei JDialog. Un JDialog este similar cu un JFrame. O diferen ntre cele dou ar fi faptul c un dialog nu este complet independent. Fiecare dialog este asociat un frame sau cu un alt dialog, care este numit fereastr printe (parent window). Fereastra dialog este dependent de printele su. De exemplu, dac fereastra printe este nchis, i fereastra dialog este nchis. Ferestrele dialog pot fi: modal sau modeless. n primul caz, fereastra printe este blocat. Utilizatorul nu poate interaciona cu fereastra printe, pn cnd fereastra dialog nu este nchis. n cazul modeless se poate interaciona cu fereastra printe. Clasa JDialog are cteva subclase folositoare, printre care JColorChoser, JFileChooser. Exemplu.
import java.awt.*; public class SimpleDialogDemo extends JApplet implements ActionListener { JLabel message; //o eticheta pentru a trimite un feedback utilizatorului Color selectedColor = Color.gray; /* * Aceasta culoare o sa fie folosita ca si culoare initiala * pentru caseta de dialog pentru alegerea culorii * Se foloseste pentru a retine culoare selectata de utilizator * astfel incat la deschiderea casetei sa afiseze culoarea corecta */

public void init() { /* * Cream applet-ul cu un mesaj si 4 butoane. * Fiecare buton o sa deschida o caseta diferita de dialog */ JPanel content = new JPanel(); setContentPane(content); content.setBackground(Color.GRAY); content.setBackground(Color.GRAY); content.setLayout( new GridLayout(3,1,3,3) ); message = new JLabel("Apasa un buton", JLabel.CENTER); message.setForeground(new Color(180,0,0)); message.setBackground(Color.WHITE); message.setOpaque(true); getContentPane().add(message); JPanel buttonBar; JButton button; buttonBar = new JPanel(); buttonBar.setLayout(new GridLayout(1,2,3,3)); buttonBar.setBackground(Color.GRAY); content.add(buttonBar); button = new JButton("Message Dialog");

15

smaranda.belciug@inf.ucv.ro
button.addActionListener(this); buttonBar.add(button); button = new JButton("Confirm Dialog"); button.addActionListener(this); buttonBar.add(button); buttonBar = new JPanel(); buttonBar.setLayout(new GridLayout(1,2,3,3)); buttonBar.setBackground(Color.GRAY); content.add(buttonBar); button = new JButton("Input Dialog"); button.addActionListener(this); buttonBar.add(button); button = new JButton("Color Chooser"); button.addActionListener(this); buttonBar.add(button);

content.setBorder(BorderFactory.createLineBorder(Color.GRAY,3)); } // end init()

/** *Raspundem la click-urile utilizatorului prin aparitia unei *casete de dialog si prin afisarea unui mesaj care sa descrie *raspunsul utilizatorului */ public void actionPerformed(ActionEvent evt) { String command = evt.getActionCommand(); if (command.equals("Message Dialog")) { message.setText("Afisez message dialog."); JOptionPane.showMessageDialog(null, "Acesta este un exemplu de JOptionPane.showMessageDialog."); message.setText("Ai inchis message dialog."); } else if (command.equals("Confirm Dialog")) { message.setText("Afisez confirm dialog."); int response = JOptionPane.showConfirmDialog(null, "Acesta este un exemplu de JOptioPane.showConfirmDialog.\n" + "Apasa un buton pentru a indica raspunsul tau."); switch(response) { case JOptionPane.YES_OPTION: message.setText("Ai apasat \"Yes\"."); break; case JOptionPane.NO_OPTION: message.setText("Ai apasat \"No\"."); break; case JOptionPane.CANCEL_OPTION: message.setText("Ai apasat \"Cancel\"."); break; case JOptionPane.CLOSED_OPTION: message.setText("Ai inchis fereastra fara sa faci o alegere."); }

16

smaranda.belciug@inf.ucv.ro
} else if (command.equals("Input Dialog")) { message.setText("Afisez input dialog."); String response = JOptionPane.showInputDialog(null, "Acesta este un exemplu de of JOptioPane.showInputDialog.\n" + "Tasteaza raspunsul si apasa pe buton."); if (response == null) message.setText("Ai dat cancel."); else if (response.trim().length() == 0) message.setText("Ai lasat casuta necompletata."); else message.setText("AI introdus \"" + response + "\"."); } else if (command.equals("Color Chooser")) { message.setText("Afisez color chooser dialog."); Color c = JColorChooser.showDialog(null,"Selecteaza o culoare",selectedColor); if (c == null) message.setText("Ai inchis fara sa selectezi o culoare."); else { selectedColor = c; //Tine minte culoarea selectata int r = c.getRed(); int g = c.getGreen(); int b = c.getBlue(); message.setText("Ai ales RGB = (" + r + "," + g + "," + b + ")."); } } } // end actionPerformed()

} // end class SimpleDialogDemo

17

smaranda.belciug@inf.ucv.ro

18

S-ar putea să vă placă și