Academic Tutorials



English | French | Portugese | Dutch | Italian
Google

Online

À la maison Codes sources E-Livres Téléchargements Nous contacter Au sujet de nous

HTML Tutorials
HTML Tutorial
XHTML Tutorial
CSS Tutorial
TCP/IP Tutorial
CSS 1.0
CSS 2.0
HLML
XML Tutorials
XML Tutorial
XSL Tutorial
XSLT Tutorial
DTD Tutorial
Schema Tutorial
XForms Tutorial
XSL-FO Tutorial
XML DOM Tutorial
XLink Tutorial
XQuery Tutorial
XPath Tutorial
XPointer Tutorial
RDF Tutorial
SOAP Tutorial
WSDL Tutorial
RSS Tutorial
WAP Tutorial
Web Services Tutorial
Browser Scripting
JavaScript Tutorial
VBScript Tutorial
DHTML Tutorial
HTML DOM Tutorial
WMLScript Tutorial
E4X Tutorial
Server Scripting
ASP Tutorial
PERL Tutorial
SQL Tutorial
ADO Tutorial
CVS
Python
Apple Script
PL/SQL Tutorial
SQL Server
PHP
.NET (dotnet)
Microsoft.Net
ASP.Net
.Net Mobile
C# : C Sharp
ADO.NET
VB.NET
VC++
Multimedia
SVG Tutorial
Flash Tutorial
Media Tutorial
SMIL Tutorial
Photoshop Tutorial
Gimp Tutorial
Matlab
Gnuplot Programming
GIF Animation Tutorial
Scientific Visualization Tutorial
Graphics
Web Building
Web Browsers
Web Hosting
W3C Tutorial
Web Building
Web Quality
Web Semantic
Web Careers
Weblogic Tutorial
SEO
Web Site Hosting
Domain Name
Java Tutorials
Java Tutorial
JSP Tutorial
Servlets Tutorial
Struts Tutorial
EJB Tutorial
JMS Tutorial
JMX Tutorial
Eclipse
J2ME
JBOSS
Programming Langauges
C Tutorial
C++ Tutorial
Visual Basic Tutorial
Data Structures Using C
Cobol
Assembly Language
Mainframe
Forth Programming
Lisp Programming
Pascal
Delphi
Fortran
OOPs
Data Warehousing
CGI Programming
Emacs Tutorial
Gnome
ILU
Soft Skills
Communication Skills
Time Management
Project Management
Team Work
Leadership Skills
Corporate Communication
Negotiation Skills
Database Tutorials
Oracle
MySQL
Operating System
BSD
Symbian
Unix
Internet
IP-Masquerading
IPC
MIDI
Software Testing
Testing
Firewalls
SAP Module
ERP
ABAP
Business Warehousing
SAP Basis
Material Management
Sales & Distribution
Human Resource
Netweaver
Customer Relationship Management
Production and Planning
Networking Programming
Corba Tutorial
Networking Tutorial
Microsoft Office
Microsoft Word
Microsoft Outlook
Microsoft PowerPoint
Microsoft Publisher
Microsoft Excel
Microsoft Front Page
Microsoft InfoPath
Microsoft Access
Accounting
Financial Accounting
Managerial Accounting


Employer des modules de GUI dans Java

Previous Next





Avant que vous commenciez à employer les composants, vous devriez savoir ce que la classe composante fournira et pouvez vous adapter les composants. Alors dira comment employer les composants ce que l'AWT fournit. Chaque genre de composant a sa propre page :




Comment utiliser les boutons

La classe de boutons fournit une exécution de bouton de défaut. Onscreen l'aspect des boutons dépend d'une plateforme qu'ils courent dessus. Si vous voulez que les boutons du programme regardent mêmes pour toute la plateforme ou autrement aillent voir spécial, vous devriez créer une sous-classe de toile pour mettre en application ce regard ; le regard ne peut pas être changé en utilisant la sous-classe de bouton. Les seules facettes de l'aspect du bouton que nous pouvons changer sans créer notre propre classe sommes les polices et le texte qu'il montre et des couleurs de premier plan et de fond.

Au-dessous de est un applet qui montre trois boutons. Quand vous cliquez le bouton gauche, il neutralise le bouton moyen et permet le droit. De même quand vous cliquez dessus le bouton droit, il permettra le bouton gauche et le bouton moyen, et il se neutralise. Au-dessous de est le code qui créera les boutons et réagit aux clics de bouton.

//In initialization code:
b1 = new Button();
b1.setLabel("Disable middle button");

b2 = new Button("Middle button");

b3 = new Button("Enable middle button");
b3.disable();

public boolean handleEvent(Event e)
{
Object target = e.target;

System.out.println("Event received: " + e);
if (e.id == Event.ACTION_EVENT)
{
if (target == b1)
{
b2.disable();
b1.disable();
b3.enable();
} else if (target == b3)
{
b2.enable();
b1.enable();
b3.disable();
}
}
return super.handleEvent(e);
}




Comment employer les toiles

Une classe de toile existent pour être subclassed. Elle ne fera rien seule ; elle fournit simplement la manière de mettre en application les composants faits sur commande. Par exemple, les toiles sont utiles comme zone de visualisation pour des images et les graphiques faits sur commande, si vous souhaitez manipuler les événements qui se produit dans une zone de visualisation.

Tout en mettant en application une sous-classe de toile. faire attention pour mettre en application minimumSize () et preferredSize () la méthode pour refléter correctement la taille de la toile. Autrement, selon la disposition que les utilisations du récipient de la toile, votre toile pourraient finir vers le haut trop de petit -- être peut-être même invisible. Voici un exemple de la sous-classe de toile qui montre l'image :

class ImageCanvas extends Canvas
{
ImageCanvas(Image img, Dimension prefSize)
{
image = img;
preferredSize = prefSize;
}

public Dimension minimumSize()
{
return preferredSize;
}

public Dimension preferredSize()
{
return preferredSize;
}

public void paint(Graphics g)
{
g.drawImage(image, 0, 0, this);
}
}




Comment employer le Checkboxes

La classe de Checkbox fournit les checkboxes -- boutons de deux états qui peuvent être "ON" ou "OFF". Si nous voulons le groupe de checkboxes dans lesquels seulement un du checkbox peut être "ON" à la fois, vous pouvez ajouter l'objet de CheckboxGroup pour surveiller les checkboxes. D'autres bonnes manières de fournir un groupe d'articles que l'utilisateur peut choisir sont les choix, les listes, et les menus.

Donné ci-dessous est le code pour un applet qui contient deux colonnes des checkboxes. Du côté gauche sont trois checkboxes indépendants. Vous pouvez choisir tous trois checkboxes, si vous aimez à. Du côté droit sont les trois checkboxes qui sont coordonnés par l'objet de CheckboxGroup. Le CheckboxGroup ne s'assure pas plus d'un de ses checkboxes est choisi à la fois. Voici le programme qui exécute ceci charge. Au-dessous de est le code qui crée les les deux les groupes de checkboxes. Note : seulement l'en second lieu, groupe mutuel-exclusif de checkboxes est commandé par le CheckboxGroup.

Panel p1, p2;
Checkbox cb1, cb2, cb3; //independent checkboxes
Checkbox cb4, cb5, cb6; //only one of these three can be selected
CheckboxGroup cbg;

cb1 = new Checkbox();
cb1.setLabel("Checkbox 1");
cb2 = new Checkbox("Checkbox 2");
cb3 = new Checkbox("Checkbox 3");
cb3.setState(true);

. . . cbg = new CheckboxGroup();
cb4 = new Checkbox("Checkbox 4", cbg, false);
cb5 = new Checkbox("Checkbox 5", cbg, false);
cb6 = new Checkbox("Checkbox 6", cbg, false);




Comment employer les choix

La classe bien choisie fournit a menu-comme la liste de choix, accédée par le bouton distinctif. L'utilisateur appuie sur le bouton pour évoquer le « menu », et choisit plus tard un des articles de la liste de menu. Un autre nom pour cet élément d'UI est « la liste instantanée ». D'autres manières de fournir les solutions de rechange multiples sont des checkboxes, des listes, et des menus.

Au-dessous de est un code d'applet qui a un choix et une étiquette. Quand l'utilisateur choisit l'article de la liste bien choisie, l'étiquette change pour refléter un article choisi ce code crée le choix et manipule les événements de elle. Note : que le deuxième paramètre à la méthode d'action () est une corde de l'article choisi.

//...Where instance variables are defined:
Choice choice; //pop-up list of choices

//...Where initialization occurs:
choice = new Choice();
choice.addItem("ichi");
choice.addItem("ni");
choice.addItem("san");
choice.addItem("shi");
label = new Label();
setLabelText(choice.getSelectedIndex(), choice.getSelectedItem());

. . . public boolean action(Event e, Object arg)
{
if (e.target instanceof Choice)
{
setLabelText(choice.getSelectedIndex(), (String)arg);
return true;
}
return false;
}
}




Comment employer les dialogues

La chose qui distingue des dialogues des fenêtres régulières (qui sont mis en application avec des objets de vue) est que le dialogue dépend d'une autre fenêtre (vue d'i'e). Quand cette autre fenêtre est détruite, et ainsi sont ses dialogues dépendants. Quand cette autre fenêtre est étée iconified, ses dialogues dépendants disparaîtra de l'écran. Quand la fenêtre est étée deiconified, ses dialogues dépendants reviennent à l'écran. L'AWT nous fournit automatiquement ce comportement.

Puisqu'aucun api pas actuellement existe a laissé les applet trouver la fenêtre qu'ils courent dedans, les applet généralement ne peuvent pas employer des dialogues. L'exception est les applet qui apportent vers le haut leurs propres fenêtres peuvent avoir les dialogues dépendants de ces fenêtres. Pour cette raison, l'applet suivant comprend le bouton qui apporte vers le haut la fenêtre qui évoque un dialogue. Voici le code pour la fenêtre que l'applet apporte vers le haut. Ce code peut être couru comme application autonome ou, avec l'aide de la classe d'AppletButton, car un applet ici est le code qui traite l'objet de dialogue :

//[HOW DO I MAKE THIS GET THE FOCUS?]
class SimpleDialog extends Dialog
{
private TextField field;
private DialogWindow parent;
private Button setButton;

SimpleDialog(Frame dw, String title)
{
super(dw, title, false);
parent = (DialogWindow)dw;

//Create and add components, such as the set button....

resize(350, 125);
}

public boolean action(Event event, Object arg)
{
if ( (event.target == setButton)
| (event.target instanceof TextField))
{
parent.setText(field.getText());
}
field.selectAll();
hide();
return true;
}
}




Comment employer les armatures

La classe de vue fournit les fenêtres pour des applet et des applications. Chaque application a besoin de la vue de l'atleast un. Si une application a la fenêtre qui devrait dépendre d'une autre fenêtre -- disparaître quand l'autre fenêtre est iconified, par exemple -- alors vous devriez employer le dialogue au lieu de la vue pour la fenêtre dépendante. (Malheureusement, les applet ne peuvent pas employer les dialogues actuellement bien, ainsi ils doivent employer les armatures.)

Au-dessous de est un code pour les usages de démonstration de menu de créer la fenêtre et de manipuler le cas où l'utilisateur ferme la fenêtre.

public class MenuWindow extends Frame
{
private boolean inAnApplet = true;
private TextArea output;

public MenuWindow()
{
//This constructor implicitly calls the Frame no-argument
//constructor and then adds components to the window.
}

public boolean handleEvent(Event event)
{
if (event.id == Event.WINDOW_DESTROY)
{
if (inAnApplet)
{
dispose();
} else
{
System.exit(0);
}
}
return super.handleEvent(event);
}

. . .

public static void main(String args[])
{
MenuWindow window = new MenuWindow();
window.inAnApplet = false;

window.setTitle("MenuWindow Application");
window.resize(250, 90);
window.show();
}
}




Comment employer les étiquettes

La classe d'étiquette fournit une manière facile pour mettre le texte uneditable et unselectable dans le GUI du programme. Les étiquettes sont alignées à la gauche de leur secteur de dessin, par défaut. nous pouvons indiquer qu'elles soient centrées ou droit-alignées en indiquant le Label.CENTER ou par Label.RIGHT pour marquer le constructeur ou sur la méthode de setAlignment (). Comme avec chaque composant, vous pouvez également faire indiquez la police et la couleur de l'étiquette.

Donnés ci-dessous sont les applet qui emploient des étiquettes. Le premier applet (LabelDemo) crée simplement trois étiquettes avec un alignement (gauche) de défaut, les met dans le GridLayout, et puis les montre. Voici le code pour LabelDemo.

import java.awt.*;
import java.applet.Applet;

public class LabelDemo extends Applet
{

public void init()
{
Label l1 = new Label();
l1.setText("Label 1");

Label l2 = new Label("Label 2");

Label l3 = new Label("Label 3");

//Add Components to the Applet.
setLayout(new GridLayout(0, 1));
add(l1);
add(l2);
add(l3);

validate();
}
}

Le deuxième applet (LabelAlignDemo) fait mêmes, sauf que lui se servent de chacun des trois alignements possibles. Puisque l'applet est plus large que nécessaire de montrer le texte, et parce que le GridLayout emploie tout espace disponible, les étiquettes ont la zone de visualisation plus large qu'elles ont besoin. Ceci a comme conséquence la différence évidente en position horizontale des trois étiquettes différent alignées.

import java.awt.*;
import java.applet.Applet;

public class LabelAlignDemo extends Applet
{

public void init()
{
Label l1 = new Label();
l1.setText("Left");
Label l2 = new Label("Center");
l2.setAlignment(Label.CENTER);
Label l3 = new Label("Right", Label.RIGHT);

//Add Components to the Applet.
setLayout(new GridLayout(0, 1));
add(l1);
add(l2);
add(l3);

validate();
}
}

Au-dessous de est un code que LabelAlignDemo emploie pour créer les étiquettes et a placé leur alignement. Afin de l'enseignement, cet applet emploie tous constructeurs de trois étiquettes.

Label l1 = new Label();
l1.setText("Left");
Label l2 = new Label("Center");
l2.setAlignment(Label.CENTER);
Label l3 = new Label("Right", Label.RIGHT);




Comment employer les listes

La classe de liste fournit le secteur scrollable contenant les articles sélectionnables des textes (un pour chaque ligne). Les listes peuvent permettre des choix multiples ou seulement un choix à la fois. D'autres composants qui permet aux utilisateurs de choisir des choix multiples sont des checkboxes (groupes de checkbox en particulier), des choix, et des menus.

Au-dessous de est le code pour un applet qui montre deux listes. La première liste (qui énumère dehors les nombres espagnols) permet des choix multiples. La deuxième liste (qui énumère les nombres italiens) permet un maximum d'un choix. Au-dessous de est un code qui crée chaque liste et manipule des événements sur la liste. Note : les données d'e.arg pour des événements d'action sont le nom de l'agir-sur l'article (semblable à l'argument pour des événements d'action sur d'autres composants tels que des boutons et les menus). Cependant, les données d'e.arg pour d'autres événements de liste sont un certain nombre agir-sur l'article.

//where instance variables are declared:
TextArea output;
List spanish, italian;

//where initialization occurs:

//Build first list, which allows multiple selections.
spanish = new List(4, true); //prefer 4 items visible
spanish.addItem("uno");
spanish.addItem("dos");
spanish.addItem("tres");
spanish.addItem("cuatro");
spanish.addItem("cinco");
spanish.addItem("seis");
spanish.addItem("siete");

//Build second list, which allows one selection at a time.
italian = new List(); //Defaults to none visible, only one selectable
italian.addItem("uno");
italian.addItem("due");
italian.addItem("tre");
italian.addItem("quattro");
italian.addItem("cinque");
italian.addItem("sei");
italian.addItem("sette");

. . .

public boolean handleEvent(Event e)
{
if (e.target instanceof List)
{
List list = (List)(e.target);
String language = (list == spanish) ?
"Spanish" : "Italian";

switch (e.id)
{
case Event.ACTION_EVENT:
String string = (String)e.arg;
output.appendText("Action event occurred on \""
+ string + "\" in "
+ language + ".\n");
break;
case Event.LIST_SELECT:
int sIndex = ((Integer)e.arg).intValue();
output.appendText("Select event occurred on item #"
+ sIndex + " (\""
+ list.getItem(sIndex) + "\") in "
+ language + ".\n");
break;
case Event.LIST_DESELECT:
int dIndex = ((Integer)e.arg).intValue();
output.appendText("Deselect event occurred on item #"
+ dIndex + " (\""
+ list.getItem(dIndex) + "\") in "
+ language + ".\n");
}
}
return super.handleEvent(e);
}




Comment employer les menus

L'applet donné ci-dessus montre plusieurs des dispositifs de menu que nous sommes susceptibles pour employer. La fenêtre qu'il apporte a vers le haut la barre de menu qui contient quatre menus. Chaque menu contient un ou plusieurs que les articles un. Le menu 1 est un menu d'arrachement ; en cliquant un à ligne pleine [exécution-spécifique ?], nous créons une nouvelle fenêtre qui contient les mêmes articles de menu que le menu 1. L'article du menu 2 seulement a un checkbox. Le menu 3 contient le séparateur entre son deuxième et les troisième articles. Le menu 4 est le menu d'aide d'une fenêtre, qui (selon une plateforme) généralement des moyens qu'elle est placée au loin vers la droite. Quand nous cliquons sur tous les articles de menu, les vitrines le témoin de corde quel article a été cliqué et quel menu il est po.

Voici le code pour la fenêtre que l'applet ci-dessus apporte vers le haut. Ce code peut fonctionner comme application autonome ou, avec l'aide d'une classe d'AppletButton, comme applet. Voici le code qui traite des menus :

public MenuWindow()
{
MenuBar mb;
Menu m1, m2, m3, m4;
MenuItem mi1_1, mi1_2, mi3_1, mi3_2, mi3_3, mi3_4, mi4_1, mi4_2;
CheckboxMenuItem mi2_1;

// ...Add the output displayer to this window...

//Build the menu bar.
mb = new MenuBar();
setMenuBar(mb);

//Build first menu in the menu bar.
m1 = new Menu("Menu 1", true);
mb.add(m1);
mi1_1 = new MenuItem("Menu Item 1_1");
m1.add(mi1_1);
mi1_2 = new MenuItem("Menu Item 1_2");
m1.add(mi1_2);

//Build help menu. Note that order in which it's added doesn't matter.
m4 = new Menu("Menu 4");
mb.add(m4); //Just setting the help menu doesn't work; must add it.
mb.setHelpMenu(m4);
mi4_1 = new MenuItem("Menu Item 4_1");
m4.add(mi4_1);
mi4_2 = new MenuItem("Menu Item 4_2");
m4.add(mi4_2);

//Build second menu in the menu bar.
m2 = new Menu("Menu 2");
mb.add(m2);
mi2_1 = new CheckboxMenuItem("Menu Item 2_1");
m2.add(mi2_1);

//Build third menu in the menu bar.
m3 = new Menu("Menu 3");
mb.add(m3);
mi3_1 = new MenuItem("Menu Item 3_1");
m3.add(mi3_1);
mi3_2 = new MenuItem("Menu Item 3_2");
m3.add(mi3_2);
m3.addSeparator();
mi3_3 = new MenuItem("Menu Item 3_3");
m3.add(mi3_3);
mi3_4 = new MenuItem("Menu Item 3_4");
mi3_4.disable();
m3.add(mi3_4);
}
public boolean action(Event event, Object arg)
{
String str = "Action detected";

if (event.target instanceof MenuItem)
{
MenuItem mi=(MenuItem)(event.target);
str += " on " + arg;
v if (mi instanceof CheckboxMenuItem)
{
str += " (state is "
+ ((CheckboxMenuItem)mi).getState()
+ ")";
}
MenuContainer parent = mi.getParent();
if (parent instanceof Menu)
{
str += " in " + ((Menu)parent).getLabel();
} else
{
str += " in a container that isn't a Menu";
}
}
str += ".\n";
//...Display string in the output area...
return false;
}




Comment employer les panneaux
Panel p1 = new Panel();
p1.add(new Button("Button 1"));
p1.add(new Button("Button 2"));
p1.add(new Button("Button 3"));




Comment employer le Scrollbars
public boolean handleEvent(Event evt)
{
switch (evt.id)
{
case Event.SCROLL_LINE_UP:
case Event.SCROLL_LINE_DOWN:
case Event.SCROLL_PAGE_UP:
case Event.SCROLL_PAGE_DOWN:
case Event.SCROLL_ABSOLUTE:
if (evt.target == vert)
{
canvas.ty = ((Integer)evt.arg).intValue();
canvas.repaint();
}
if (evt.target == horz)
{
canvas.tx = ((Integer)evt.arg).intValue();
canvas.repaint();
}
}
return super.handleEvent(evt);
}




Comment employer le TextAreas et le TextFields
//Where instance variables are defined:
TextField textField;
TextArea textArea;

public void init()
{ textField = new TextField(20);
textArea = new TextArea(5, 20);
textArea.setEditable(false);

...//Add the two components to the panel.
}
public boolean handleEvent(Event evt)
{
if (evt.id == Event.ACTION_EVENT)
{
String text = textField.getText();
textArea.appendText(text + "\n");
textField.selectAll();
}
return super.handleEvent(evt);
}






Previous Next

Keywords: JoltBeans.


HTML Quizes
HTML Quiz
XHTML Quiz
CSS Quiz
TCP/IP Quiz
CSS 1.0 Quiz
CSS 2.0 Quiz
HLML Quiz
XML Quizes
XML Quiz
XSL Quiz
XSLT Quiz
DTD Quiz
Schema Quiz
XForms Quiz
XSL-FO Quiz
XML DOM Quiz
XLink Quiz
XQuery Quiz
XPath Quiz
XPointer Quiz
RDF Quiz
SOAP Quiz
WSDL Quiz
RSS Quiz
WAP Quiz
Web Services Quiz
Browser Scripting Quizes
JavaScript Quiz
VBScript Quiz
DHTML Quiz
HTML DOM Quiz
WMLScript Quiz
E4X Quiz
Server Scripting Quizes
ASP Quiz
PERL Quiz
SQL Quiz
ADO Quiz
CVS Quiz
Python Quiz
Apple Script Quiz
PL/SQL Quiz
SQL Server Quiz
PHP Quiz
.NET (dotnet) Quizes
Microsoft.Net Quiz
ASP.Net Quiz
.Net Mobile Quiz
C# : C Sharp Quiz
ADO.NET Quiz
VB.NET Quiz
VC++ Quiz
Multimedia Quizes
SVG Quiz
Flash Quiz
Media Quiz
SMIL Quiz
Photoshop Quiz
Gimp Quiz
Matlab Quiz
Gnuplot Programming Quiz
GIF Animation Quiz
Scientific Visualization Quiz
Graphics Quiz
Web Building  Quizes
Web Browsers Quiz
Web Hosting Quiz
W3C Quiz
Web Building Quiz
Web Quality Quiz
Web Semantic Quiz
Web Careers Quiz
Weblogic Quiz
SEO Quiz
Web Site Hosting Quiz
Domain Name Quiz
Java Quizes
Java Quiz
JSP Quiz
Servlets Quiz
Struts Quiz
EJB Quiz
JMS Quiz
JMX Quiz
Eclipse Quiz
J2ME Quiz
JBOSS Quiz
Programming Langauges Quizes
C Quiz
C++ Quiz
Visual Basic Quiz
Data Structures Using C Quiz
Cobol Quiz
Assembly Language Quiz
Mainframe Quiz
Forth Programming Quiz
Lisp Programming Quiz
Pascal Quiz
Delphi Quiz
Fortran Quiz
OOPs Quiz
Data Warehousing Quiz
CGI Programming Quiz
Emacs Quiz
Gnome Quiz
ILU Quiz
Soft Skills Quizes
Communication Skills Quiz
Time Management Quiz
Project Management Quiz
Team Work Quiz
Leadership Skills Quiz
Corporate Communication Quiz
Negotiation Skills Quiz
Database Quizes
Oracle Quiz
MySQL Quiz
Operating System Quizes
BSD Quiz
Symbian Quiz
Unix Quiz
Internet Quiz
IP-Masquerading Quiz
IPC Quiz
MIDI Quiz
Software Testing Quizes
Testing Quiz
Firewalls Quiz
SAP Module Quizes
ERP Quiz
ABAP Quiz
Business Warehousing Quiz
SAP Basis Quiz
Material Management Quiz
Sales & Distribution Quiz
Human Resource Quiz
Netweaver Quiz
Customer Relationship Management Quiz
Production and Planning Quiz
Networking Programming Quizes
Corba Quiz
Networking Quiz
Microsoft Office Quizes
Microsoft Word Quiz
Microsoft Outlook Quiz
Microsoft PowerPoint Quiz
Microsoft Publisher Quiz
Microsoft Excel Quiz
Microsoft Front Page Quiz
Microsoft InfoPath Quiz
Microsoft Access Quiz
Accounting Quizes
Financial Accounting Quiz
Managerial Accounting Quiz

Privacy Policy
Copyright © 2003-2024 Vyom Technosoft Pvt. Ltd., All Rights Reserved.