Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Contenido
PROGRAMACIN GRFICA CON SWING............................................................................... 3 CARACTERISTICAS DE SWING ................................................................................................ 4 JERARQUA DE COMPONENTES DEL SWING ....................................................................... 5 COMPONENTES............................................................................................................................ 9 EVENTOS ....................................................................................................................................... 9 Qu es un evento? .................................................................................................................... 10 El modelo de delegacin de eventos.......................................................................................... 10 Tipos de Eventos ....................................................................................................................... 14 Origen de eventos ...................................................................................................................... 16 Adapters ..................................................................................................................................... 19 COMPONENTES ATMICOS DEL SWING ............................................................................. 24 JButton ....................................................................................................................................... 24 JCheckBox ................................................................................................................................. 24 JRadioButton ............................................................................................................................. 26 JList ........................................................................................................................................... 29 JComboBox ............................................................................................................................... 31 JLabel ........................................................................................................................................ 32 JTextField y JPasswordField ..................................................................................................... 33 JTextArea................................................................................................................................... 36 CUADROS DE DIALOGO ESTNDAR .................................................................................... 38 JOptionPane ............................................................................................................................... 38 JFileChooser .............................................................................................................................. 43 JColorChooser ........................................................................................................................... 45 LAYOUTS .................................................................................................................................... 47 FlowLayout ................................................................................................................................ 48 BorderLayout ............................................................................................................................. 49 GridLayout ................................................................................................................................ 51 CONTENEDORES DE ALTO NIVEL ........................................................................................ 54 JDialog ....................................................................................................................................... 55 CONTENEDORES DE NIVEL INTERMEDIO .......................................................................... 56 JScrollPane ................................................................................................................................ 56 JPanel ......................................................................................................................................... 59
Pgina 1
Pgina 2
Pgina 3
CARACTERISTICAS DE SWING
Se creo como una extensin de la AWT aadiendo las siguientes caractersticas: Componentes Swing. Soporte de Look& Feel. API de accesibilidad. Java 2D API. Soporte de Drag& Drop. Habitualmente tambin se usa como trmino genrico para referirse a las JFC (Java Foundation Classes). Su diferencia ms importante con la AWT es que los componentes son lightweight. Para diferenciar los componentes Swing de los AWT, sus nombres estn precedidos por una J. Todas las clases Swing se encuentran en el paquete javax.swing.* Nunca debemos mezclar componentes Swing con componentes AWT en una misma aplicacin: Lightweight vs. Heavyweight. Swing sigue trabajando con los conceptos de la AWT: Contenedores. Componentes. LayoutManagers. Eventos.
Pgina 4
Pgina 5
Pgina 6
Pgina 7
Pgina 8
JButton Es un botn usado para recibir el clic del ratn. JCanvas Un lienzo o panel usado para dibujar. JCheckbox Cuadro de verificacin. Es un componente que le permite seleccionar un elemento. JCheckboxMenuItem Es un cuadro de verificacin dentro de un men. JChoice Es una lista desplegable de elementos estticos. Se trata de una clase abstracta que implementa toda la funcionalidad bsica de JComponent las clases visuales. JContainer Es el padre de todos los contenedores. JDialog Es un cuadro de dilogo o una ventana de alto nivel con titulo y bordes. Es un marco o ventana y es la clase base de todas las ventanas GUI con JFrame controles para ventana. JLabel Etiqueta. Es una cadena de texto como componente. JList Un componente que contiene un conjunto dinmico de elementos. Es un elemento dentro de la barra de men, el cual contiene un conjunto de JMenu elementos de tipo men. JMenuItem Un elemento dentro de un men. Una clase contenedora bsica usado frecuentemente para crear diseos (layouts) JPanel complejos. Un componente que permite al usuario hacer una seleccin dentro de un rango de JScroollbar valores. Una clase contenedora que implementa un deslizador horizontal y vertical para un JScroolPane nico componente hijo. JTextArea Un componente que permite al usuario introducir texto en un bloque o rectngulo. Tabla. Componentes bsicos de SWING.
EVENTOS
El sistema de gestin de eventos de Java 1.2 es el mismo que Java 1.1 y por lo tanto el mismo que para las libreras AWT. Aunque los desarrolladores de Java considerasen que para mejorar el lenguaje se necesitaba dejar a un lado las libreras AWT e introducir las Swing no sintieron lo mismo del sistema de gestin de eventos, consideraron que era lo suficientemente bueno. Realmente este sistema de gestin de eventos es bastante elegante y sencillo, sobre todo si se compara con el sistema de gestin de eventos de Java 1.0, mucho ms engorroso de usar y menos elegante.
Pgina 9
Pgina 10
Figura. Gestin de eventos en Java. Explicacin de la Figura: A la fuente del evento, en este caso un botn, le indicamos quin ser su manejador de eventos (es el mtodo que atender el evento), manejador que ha de extender la clase Adapter correspondiente o implementar la interfaz Listener (interfaz ActionLitener en este caso). Cuando el usuario genere el evento deseado (en este caso pulse el botn), el objeto fuente empaqueta informacin a cerca del evento generando un objeto de tipo Event (ActionEvent en este caso) e invoca el mtodo correspondiente del manejador (actionPerformed(actionEvent)) pasndole como informacin el objeto de tipo Event generado. Es responsabilidad del manejador, y no de la fuente, responder al evento, por ello se dice que la fuente delega la gestin del evento en el manejador. Lo que la fuente de eventos le pasa al objeto encargado de escuchar los eventos es, como no, otro objeto. Es un objeto tipo Event. En este objeto va toda la informacin necesaria para la correcta gestin del evento por parte del objeto que escucha los eventos. El objeto que escucha los eventos ha de implementar para ello una interface. El nombre de esta interface es siempre el nombre del evento ms Listener. Para que un objeto escuche eventos de ratn ha de implementar la interface MouseListener, para que escuche eventos de teclado KeyListener.....
Pgina 11
Pgina 12
Pgina 13
MouseMotionEvent Arrastrar o mover el mouse. WindowEvent Maximizar, minimizar, abrir, cerrar, activar o desactivar una ventana.
Clic en el botn. Cambiar el valor de un componente. Seleccionar o deseleccionar un Item. Un texto ha cambiado.
Pgina 14
Pgina 15
AbstractButton JApplet JButton JCanvas JCheckBox JCheckBoxMenuI tem JChoice JComboBox JComponent JContainer DefaultButtonMod el JDialog JFileChooser JFileDialog JFrame JLabel JList JMenu JMenuItem JPanel JPopupMenu JScrollBar JScrollPane JTextArea JTextField Window
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
x x
x x x x
x x
x x
x x x x x
x x x x x x
x x x x x x
x x x x x x
x x x x x x
x x x x x x
x x x
Pgina 16
AbstractButton AbstractDocument DefaultBoundedRangeModel DefaultButtonModel DefaultCaret DefaultCellEditor DefaultColorSelectionModel DefaultSingleSelectionModel DefaulStyledDocument DefaultTableColumnModel DefaultTreeCellEditor JComponent MenuSelectionManager JProgressBar JTabbedPane JTextComponent JSlider JViewport StyleContext StyleContext.NamedStyle
Componente Swing
x x x x x x
Pgina 17
Componente Swing AbstractAction AbstractTableModel DefaultTreeModel DefaultTreeSelectionModel JComponent JMenu JPopupMenu JTree SwingPropertyChangeSupport TableColumn UIDefaults UIManager
x x x x x x x x
x x x X x
Pgina 18
f.setVisible(true); } }///:~
Pgina 19
f.setVisible(true); } }///:~ A continuacin en la siguiente tabla damos un listado de las principales interfaces junto a sus respectivas clases Adapter y los mtodos que poseen:
Pgina 20
Pgina 21
ListDataEvent ListDataListener
ListSelectionEvent ListSelectionListener MenuDragMouseEvent menuDragMouseDragged(MenuDragMouseEvent ev) MenuDragMouseListener menuDragMouseEntered(MenuDragMouseEvent ev) menuDragMouseExited(MenuDragMouseEvent ev) menuDragMouseReleased(MenuDragMouseEvent ev) MenuKeyEvent menuKeyPressed(MenuKeyEvent ev) MenuKeyListener menuKeyReleased(MenuKeyEvent ev) menuKeyTyped(MenuKeyEvent ev) MenuEvent menuCanceled(MenuEvent ev) MenuListener menuDeselected(MenuEvent ev) menuSelected(MenuEvent ev) Tabla. Interfaces y Adapters nuevos con sus respectivos mtodos.
Pgina 22
Pgina 23
JButton
Ya nos es familiar que un objeto de la clase JButton sea un componente. El manejo de botones ya se abordo en la seccin de El modelo de delegacin de eventos, por tal motivo se dar por visto este tema.
JCheckBox
El componente JCheckBox nos provee de un simple dispositivo de encendido/apagado con una etiqueta de texto a un lado. Veamos el siguiente ejemplo: Si se selecciona el JCheckBox correspondiente desplegar el sabor del helado correspondiente, si se quita la marca de verificacin o la palomita escribir que se deselecciono ese sabor correspondiente.
import javax.swing.JFrame; import javax.swing.JCheckBox; import java.awt.FlowLayout; import java.awt.Color; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; public class JCheckBoxTest{ public static void main(String args[]){ JFrame f = new JFrame(); Establece el titulo de la ventana f.setTitle("Ricos Helados");// titulo del JFrame f.setSize(370,145); Establece el tamao de la ventana f.getContentPane().setLayout(new FlowLayout()); // se crean los componentes JCheckBox JCheckBox fresa = new JCheckBox("FRESA");//Se inicializa con FRESA JCheckBox mango = new JCheckBox(); JCheckBox limon = new JCheckBox(); fresa.setBackground(Color.pink); // color del fondo, hereda de la clase JComponent fresa.addItemListener(new ItemListener() // se agrega un oyente { public void itemStateChanged(ItemEvent ev){ //se implementa un mtodo por claridad del cdigo fresita(ev);// se delega el evento } });
Pgina 24
Pgina 25
antes
JRadioButton
Si se quieren botones de seleccin nica, los conocidos como botones radio, que tienen la particularidad de que solamente puede haber uno seleccionado. Cuando aadimos estos componentes (JRadioButtons) a nuestro diseo se aaden por grupos (ButtonGroup), aadiendo botones a ese grupo uno a uno; la seleccin de uno distinto dentro de un grupo provoca la inmediata deseleccin del que antes estaba seleccionado. Se emplean para darle a elegir al usuario entre un grupo de opciones mutuamente excluyentes. Swing permite que cualquier AbstractButton pueda ser aadido a un ButtonGroup. En este ejemplo se utiliza un solo manejador de eventos para cada pulsacin del JRadioButton y se crea una clase interna.
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JRadioButtonTest{ /*static y global por k se utilizan en la clase ManejadorBotonOpcion Se crea un cuadro de texto inicializado con 30 columnas*/ private static JTextField campo = new JTextField( "cambia el estilo del tipo de letra", 30); public static void main(String args[]){ JFrame f = new JFrame(); f.setTitle("JRadioButton Tipos de Letras");// titulo del JFrame f.setSize(350,100); f.getContentPane().setLayout(new FlowLayout()); // se crean los componentes JCheckBox JRadioButton botonSimple = new JRadioButton("Simple",true); JRadioButton botonNegrita = new JRadioButton("Negrita",false); JRadioButton botonCursiva = new JRadioButton("Cursiva",false); // crear relacin lgica entre objetos JRadioButton para que sean exclusivos ButtonGroup grupoBotonesOpcion = new ButtonGroup(); Tambien es posible aadir los botones al grupoBotonesOpcion.add(botonSimple); grupo a trves de la interfaz grafica de grupoBotonesOpcion.add(botonNegrita); netbeans, que lo har en el metodo init grupoBotonesOpcion.add(botonCursiva); // crear objetos de tipo de letra Font tipoLetraSimple = new Font("Serif", Font.PLAIN, 14); Font tipoLetraNegrita = new Font("Serif", Font.BOLD, 14);
components.
Pgina 26
Pgina 27
Pgina 28
JList
Se trata de un componente con una funcin similar a los dos anteriores (JCheckBox y JRadioButton), slo que aqu las posibles selecciones se encuentran en una lista, que normalmente lleva un scroll incorporado, y se seleccionan haciendo clic directamente sobre ellas. Se emplea cuando el nmero de opciones entre las que ha de escoger el usuario es demasiado grande para presentrsela en forma de radiobuttons o checkboxes. Posee mtodos para permitir simple o mltiple seleccin, seleccionar o deseleccionar un componente, averiguar que componente est seleccionado... import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JList; public class JListTest1 { public static void main(String[] args) { JFrame f=new JFrame(); f.setTitle("JListTest"); f.setSize(200,180); f.getContentPane().setLayout(new FlowLayout()); Crea un array de strings y se String[] labels={"Primero","Segundo","Tercero", los pasa al JList para que "Cuarto","Quinto","Sexto", cree la lista. "Septimo","Octavo","Noveno"}; JList list=new JList(labels); f.getContentPane().add(list); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }// end main() }///:~
Pgina 29
Pgina 30
Pgina 31
JLabel
No es ms que una etiqueta de texto que podemos colocar al lado de cualquier componente para darle una indicacin al usuario de cual es la funcin de dicho componente. import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel; public class JLabelTest { public static void main(String[] args) { JFrame f=new JFrame(); f.setTitle("JLabelTest"); f.setSize(200,100); f.getContentPane().setLayout(new FlowLayout()); JLabel l1=new JLabel("Una etiqueta"); JLabel l2=new JLabel(); l2.setText("Otra etiqueta"); f.getContentPane().add(l1); f.getContentPane().add(l2); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }// end main() }///:~
Pgina 32
Pgina 33
Pgina 34
Pgina 35
Pgina 36
Pgina 37
Pgina 38
Pgina 39
//se inicializa
try { //Hacemos parse para convertir a entero entero = Integer.parseInt ( JOptionPane.showInputDialog("Escribe un entero")); } catch (Exception e) { /* en caso de algun error muestra mensaje por ejemplo * si se introduce algo diferente de un entero */ JOptionPane.showMessageDialog(null, "Error"); break; } JOptionPane.showMessageDialog(null, "Nmero: " + entero); //Se pueden hacer operaciones como siempre if(entero < 5) { JOptionPane.showMessageDialog( null, "El Numero: " + entero + " es menor a 5"); } break; case 7: //Salir del programa opcion = -1; break; }// fin del switch } while(opcion != (- 1) );// fin del do-while } //end main() }///:~
Pgina 40
Opcion1
Opcion2
Mensaje Simple
Otro Men
Pgina 41
Pide Cadena
PideEntero
Pgina 42
Pgina 43
Pgina 44
Pgina 45
Pgina 46
Pgina 47
Pgina 48
BorderLayout
Es el administrador de diseo por default de la clase JFrame. Los componentes son agregados a 5 regiones especficas dentro de la ventana o frame: NORTH ocupa la parte de arriba. SOUTH ocupa la parte inferior. EAST ocupa el lado derecho. WEST ocupa la parte izquierda. CENTER ocupa la parte central. Cuando ajustamos verticalmente el tamao de la ventana o frame, las regiones EAST, WEST y CENTER son ajustadas.
Pgina 49
Pgina 50
GridLayout
Este administrador de diseo proporciona flexibilidad para colocar componentes en celdillas de izquierda a derecha y de arriba a abajo en una rejilla al estilo de una hoja electrnica de clculo con filas y columnas. Por ejemplo un GridLayout con tres renglones y dos columnas puede ser creado mediante la sentencia new GridLayout(3,2) lo que se traduce en 6 celdas.
Pgina 51
Contenedor Layout Manager JPanel FlowLayout JApplet FlowLayout Jrame BorderLayout JDialog BorderLayout JScrollPane FlowLayout Tabla. Layuts por defecto de los contenedores Swing
Pgina 52
setSize( 300, 150 ); setVisible( true ); } // fin del constructor de DemoGridLayout // manejar eventos de botn, alternando entre los esquemas public void actionPerformed( ActionEvent evento ) { if ( alternar ) contenedor.setLayout( cuadricula2 ); else contenedor.setLayout( cuadricula1 ); alternar = !alternar; // establecer alternar en el valor opuesto contenedor.validate();// Validates this container and all of its subcomponents. // Se realiza en cambio fsico de los componentes } public static void main( String args[] ) { GridLayoutTest aplicacion = new GridLayoutTest(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }//end main() }///:~
Pgina 53
Pgina 54
Pgina 55
El JScrollPane crea y maneja las barras de desplazamiento y las contiene en un solo componente. No es posible controlar el administrador de diseo que usa, en lugar de esto se puede agregar a un JPanel para que el JScrollPane configure el administrador de diseo y coloque los componentes en dicho panel. Ojo: Generalmente, no es posible manejar eventos en un JScrollPane; los eventos son manejados a travs de los componentes que se contengan. Se presentan dos versiones diferentes de cdigo fuente de la misma aplicacin JScrollPaneTest1 y JScrollPaneTest2, para ver las diferentes formas de programar el mismo cdigo pero con diversa estructura y as poder enriquecer ms la comprensin de cdigos de Java ya sea para programar nuevas aplicaciones desde cero o entender y extraer fragmentos de cdigo de otros programadores y adaptarlos a nuestras necesidades.
Pgina 56
Pgina 57
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JScrollPaneTest2{ private static JList listaColores, listaCopia; private static JButton botonCopiar; private static JScrollPane jsp1, jsp2; private final static String nombresColores[] = { "Negro", "Azul", "Cyan", "Gris oscuro", "Gris", "Verde", "Gris claro", "Magenta", "Naranja", "Rosa", "Rojo", "Blanco", "Amarillo" }; public static void main(String args[]) { JFrame f= new JFrame("Listas de seleccin mltiple"); f.setSize(325,130); f.getContentPane().setLayout(new FlowLayout()); // establecer objeto JList listaColores listaColores = new JList(nombresColores); listaColores.setVisibleRowCount(5);//Mostrados en el JScrollPane listaColores.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); jsp1= new JScrollPane(listaColores); f.getContentPane().add(jsp1); //f.getContentPane().add(new JScrollPane(listaColores)); // crear botn copiar y registrar su componente de escucha botonCopiar = new JButton("Copiar >>>"); f.getContentPane().add( botonCopiar ); botonCopiar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evento) { // colocar valores seleccionados en listaCopia listaCopia.setListData(listaColores.getSelectedValues()); } }); // establecer objeto JList listaCopia listaCopia = new JList(); listaCopia.setVisibleRowCount(5); listaCopia.setFixedCellWidth(100); listaCopia.setFixedCellHeight(15); listaCopia.setSelectionMode( ListSelectionModel.SINGLE_INTERVAL_SELECTION ); jsp2= new JScrollPane(listaCopia); f.getContentPane().add(jsp2); //f.getContentPane().add(new JScrollPane(listaCopia));
Pgina 58
JPanel
Los Paneles son los contenedores de propsito general ms frecuentemente utilizados. Implementados con la clase JPanel, los paneles no aaden casi ninguna funcionalidad ms all de las que tienen los objetos JComponent. Normalmente se usan para agrupar componentes, porque los componentes estn relacionados o slo porque agruparlos hace que la distribucin sea ms sencilla. Un panel puede usar cualquier controlador de distribucin, y se les puede dotar de bordes fcilmente. Un Panel es como un Frame y provee del espacio para que el programador coloque cualquier componente GUI, incluyendo tambin otros paneles. Cada panel hereda de la clase Container todos sus mtodos y atributos, y puede tener su propio administrador de diseo. Ojo: Una de las ventajas de aadir paneles sobre nuestro frame es que los paneles al derivar de JComponent poseen el mtodo paintComponent() que permite dibujar y escribir texto sobre el panel de modo sencillo. Adems cuando deseamos agregar ms componentes en los Layouts por regin (BorderLayout ) usaremos la clase JPanel.
import java.awt.*; import javax.swing.*; /*JPANEL PARA PINTAR GRAFICAS*/ public class PanelPersonalizado extends JPanel { /*los miembros y mtodos son public * para ser llamados por la otra clase*/ public final static int CIRCULO = 1, CUADRADO = 2; private int figura; // usar figura para dibujar un valo o rectngulo public void paintComponent( Graphics g ){ super.paintComponent( g ); if ( figura == CIRCULO ) g.fillOval( 50, 10, 60, 60 ); else if ( figura == CUADRADO ) g.fillRect( 50, 10, 60, 60 ); } // establecer valor de figura y repintar PanelPersonalizado public void dibujar( int figuraADibujar ) { figura = figuraADibujar; repaint();//llama a paintComponent } }///:~
Pgina 59
Pgina 60
JtabbedPane
Con la clase JTabbedPane, podemos tener varios componentes (normalmente objetos JPanel) compartiendo el mismo espacio. El usuario puede elegir qu componente ver seleccionando la pestaa del componente deseado. Para crear un TabbedPane, simplemente se ejemplariza un JTabbedPane, se crean los componentes que deseemos mostrar, y luego los aadimos al JTabbedPane utilizando el mtodo addTab.
Pgina 61
/*SwingConstants:=> A collection of constants generally used for positioning and orienting components on the screen. JLabel(String text, int horizontalAlignment) Creates a JLabel instance with the specified text and horizontal alignment.*/ JLabel etiqueta1 = new JLabel("panel uno", SwingConstants.CENTER); JLabel etiqueta2 = new JLabel("panel dos", SwingConstants.CENTER); JLabel etiqueta3 = new JLabel("panel tres"); // crear objeto JTabbedPane JTabbedPane panelConFichas = new JTabbedPane(); /* establecer pane11 y agregarlo al objeto JTabbedPane*/ JPanel panel1 = new JPanel(); panel1.add(etiqueta1); /*addTab(String title, Icon icon, Component component, String tip)*/ panelConFichas.addTab("Ficha uno", null, panel1, "Primer panel"); // establecer panel2 y agregarlo al objeto JTabbedPane JPanel panel2 = new JPanel(); panel2.setBackground(Color.PINK); panel2.add(etiqueta2); panelConFichas.addTab("Ficha dos", null, panel2, "Segundo panel"); // establecer panel3 y agregarlo al objeto JTabbedPane JPanel panel3 = new JPanel(); panel3.setLayout(new BorderLayout()); panel3.add( new JButton("Norte"), BorderLayout.NORTH ); panel3.add( new JButton("Sur"), BorderLayout.SOUTH ); panel3.add( new JButton("Oeste"), BorderLayout.WEST ); panel3.add( new JButton("Este"), BorderLayout.EAST ); panel3.add( etiqueta3, BorderLayout.CENTER ); panelConFichas.addTab("Ficha tres", null, panel3, "Tercer panel"); // agregar objeto JTabbedPane al contenedor getContentPane().add(panelConFichas); setSize(300, 200); setVisible( true ); } // fin del constructor public static void main(String args[]) { JTabbedPaneTest demoPanelConFichas = new JTabbedPaneTest(); demoPanelConFichas.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }// end main() }///:~
Pgina 62
JSplitPane
JSplitPane se usa para dividir con una barrita divisoria dos y solo dos componentes, mismos que pueden ser alineados de izquierda a derecha o de arriba hacia abajo. Arrastrando el divisor, el usuario puede especificar qu cantidad de rea pertenece a cada componente. Un JSplitPane se utiliza cuando dos componentes contienen informacin relacionada y queremos que el usuario pueda cambiar el tamao de los componentes en relacin a uno o a otro. Un uso comn de un JSplitPane es para contener listas de elecciones y una visin de la eleccin actual.
Pgina 63
Pgina 64
public class JSplitPaneTest1 { static JFrame f= new JFrame(); static JSplitPane jsplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); static JLabel etiqueta1 = new JLabel("en split1 label1"); static JLabel etiqueta2 = new JLabel("en split2 label2"); public static void main(String[] args){ f.setTitle("JSplitPane"); f.setSize(300,200); //cargando jsplitpane con sus dos componentes jsplitPane.add(etiqueta1); jsplitPane.add(etiqueta2); //cargando la ventana con splitpanel f.getContentPane().add(jsplitPane,BorderLayout.CENTER); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); f.setVisible(true); }; //end main() }///:~
JToolBar
Un objeto JToolBar crea una barra de herramientas con iconos dentro de una fila o una columna. Normalmente las barras de herramientas proporcionan acceso a funcionalidades que tambin se encuentran en tems de mens.
Pgina 65
Pgina 66
MENUS
Un Menu es un componente diferente a otros componentes porque no se puede agregar a un Menu a los contenedores comunes. Solo se puede agregar mens a un "menu container".
JMenuBar
Un componente JMenuBar es un men horizontal. Puede solamente agregarse a un objeto JFrame, y forma la raz de todos los rboles men. Un JFrame despliega un JMenuBar a la vez. Se puede comenzar un rbol de men poniendo un JMenuBar "una barra de men" en un JFrame, usando el mtodo setJMenuBar(). Desde este punto, se pueden agregar mens a la barra de men y mens o elementos de men dentro del men. El JMenuBar no soporta oyentes. Como parte normal del comportamiento de un men, los eventos anticipados que ocurran en la regin de la barra de men son procesados automticamente.
JMenu
Es posible crear entradas a una barra de men agregando objetos de la clase JMenu. Los componentes JMenu proveen al JMenuBar elementos de tipo men pulldown "mens desplegables".
Pgina 67
JMenuItem
Un componente JMenuItem son los nodos hoja de un rbol de men. Son agregados a un men para completarlo. Swing tambin soporta JCheckBox y JRadioButton en menus, utilizando las clases correspondientes JCheckBoxMenuItem, JRadioButtonMenuItem.
Pgina 68
=>
contiene
JMenuItem,
/*ELEMENTOS DEL MENU1*/ JMenuItem menuItem1= new JMenuItem("Opcion1"); JMenuItem menuItem2= new JMenuItem("Opcion2"); //SE AGREGAN AL menu1 menu1.add(menuItem1); menu1.add(menuItem2); /*ELEMENTOS DEL MENU2*/ JCheckBoxMenuItem jcbmenuItem1= new JCheckBoxMenuItem("Opcion1"); JCheckBoxMenuItem jcbmenuItem2= new JCheckBoxMenuItem("Opcion2",true); JRadioButtonMenuItem jcbmenuItem3= new JRadioButtonMenuItem("Opcion3",true); //SE AGREGAN AL menu2 menu2.add(jcbmenuItem1); menu2.add(jcbmenuItem2); menu2.addSeparator(); //Agrega un separador menu2.add(jcbmenuItem3); /*MENU 1 Y MENU2 SE AGREGAN AL MENUBAR*/ menuBar.add(menu1); menuBar.add(menu2); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }//end main() }///:~
Pgina 69
Pgina 70
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JMenuBarTest2 extends JFrame { private final Color valoresColor[]={Color.black,Color.blue,Color.red,Color.green }; private JRadioButtonMenuItem elementosColor[], tiposLetra[]; private JCheckBoxMenuItem elementosEstilo[]; private JLabel pantallaEtiqueta; private ButtonGroup grupoTiposLetra, grupoColores; private int estilo; public JMenuBarTest2(){ super("JMenuBarTest2"); // establecer etiqueta para mostrar texto pantallaEtiqueta = new JLabel("Texto de ejemplo", SwingConstants.CENTER ); pantallaEtiqueta.setForeground(valoresColor[0]); pantallaEtiqueta.setFont(new Font("Serif", Font.PLAIN, 72)); getContentPane().add(pantallaEtiqueta, BorderLayout.CENTER); // crear barra de mens y adjuntarla a la ventana del Frame JMenuBar barra = new JMenuBar(); setJMenuBar(barra); // establecer men Archivo y sus elementos de men JMenu menuArchivo = new JMenu("Archivo"); menuArchivo.setMnemonic('A'); // establecer elemento de men Acerca de... JMenuItem elementoAcerca = new JMenuItem( "Acerca de..." ); elementoAcerca.setMnemonic('c'); menuArchivo.add(elementoAcerca); elementoAcerca.addActionListener(new ActionListener(){ // mostrar cuadro de dilogo de mensaje cuando se seleccione Acerca de... public void actionPerformed( ActionEvent evento ){ JOptionPane.showMessageDialog(JMenuBarTest2.this, "ste es un ejemplo\ndel uso de mens", "Acerca de...", JOptionPane.PLAIN_MESSAGE ); } }); // establecer elemento de men Salir JMenuItem elementoSalir = new JMenuItem("Salir"); elementoSalir.setMnemonic('S'); menuArchivo.add(elementoSalir); elementoSalir.addActionListener(new ActionListener(){ // terminar la aplicacin cuando el usuario haga clic en elementoSalir public void actionPerformed(ActionEvent evento) { System.exit(0); } });
Pgina 71
Pgina 72
Pgina 73
Pgina 74
Pgina 75
Pgina 76
import java.awt.*; import java.awt.event.*; import javax.swing.*; //Se elimino public class KeyListenerTest1 extends JFrame implements KeyListener { public class KeyListenerTest3 extends JFrame { private String linea1 = "", linea2 = "", linea3 = ""; private JTextArea areaTexto; public KeyListenerTest3() { super("Demostracin de eventos de pulsacin de tecla"); // establecer objeto JTextArea areaTexto = new JTextArea(10,15); areaTexto.setText( "Oprima cualquier tecla en el teclado..." ); areaTexto.setDisabledTextColor(Color.blue); getContentPane().add(areaTexto); //ManejadorTeclas teclas = new ManejadorTeclas(); //addKeyListener(this); // eventos de teclas para el JTextArea areaTexto.addKeyListener(new KeyListener() { // manejar evento de pulsacin de cualquier tecla public void keyPressed(KeyEvent evento) { /*getKeyText(int keyCode)=>Returns a String describing the keyCode, * such as "HOME", "F1" or "A". * getKeyCode()=>Returns the integer (ASCII)keyCode associated with the key in this * event. *getKeyChar()=> Returns the character associated with the key in this event.*/ //System.out.println(evento.getKeyChar());*/ linea1 = "Se oprimi tecla: " + evento.getKeyText(evento.getKeyCode()); establecerLineas2y3(evento); } // manejar evento de liberacin de cualquier tecla public void keyReleased(KeyEvent evento) { linea1 = "Se solt tecla: " + evento.getKeyText(evento.getKeyCode()); establecerLineas2y3(evento); } // manejar evento de pulsacin de una tecla de accin public void keyTyped(KeyEvent evento) { // no hay nada } // establecer segunda y tercera lneas de salida private void establecerLineas2y3(KeyEvent evento) { //F1-F12, ImpPant, Inicio, Supr, etc.. linea2 = "Esta tecla " + (evento.isActionKey() ? "" : "no ") + "es una tecla de accin"; String temp = evento.getKeyModifiersText(evento.getModifiers()); //Ctrl, Shift, Alt, Ctrl+Alt linea3 = "Teclas modificadoras oprimidas: " + (temp.equals("") ? "ninguna" : temp); areaTexto.setText(linea1 + "\n" + linea2 + "\n" + linea3 + "\n"); }
Pgina 77
public static void main( String args[] ) { KeyListenerTest3 aplicacion = new KeyListenerTest3(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }// end main() }
///:~
CLASE Color
La clase java.awt.Color encapsula colores utilizando el formato RGB (Red, Green, Blue). Las componentes de cada color primario en el color resultante se expresan con nmeros enteros entre 0 y 255, siendo 0 la intensidad mnima de ese color y 255 la mxima. En la clase Color existen constantes para colores predeterminados de uso frecuente: black, white, green, blue, red, yellow, magenta, cyan, orange, pink, gray, darkGray, lightGray. Se puede construir mediante un valor RGB: Color amarillo = new Color(255,255,0); O utilizar colores predefinidos mediante constantes: Color amarillo = Color.YELLOW; Soporta transparencias (alpha) mediante un valor entre 0.0 y 1.0 La Tabla muestra algunos mtodos de la clase Color.
Pgina 78
f.getContentPane().add(etiqueta1); f.getContentPane().add(etiqueta2); f.getContentPane().add(etiqueta3); f.getContentPane().add(etiqueta4); f.getContentPane().add(etiqueta5); f.getContentPane().add(etiqueta6); f.getContentPane().add(etiqueta7); f.getContentPane().add(etiqueta8); f.getContentPane().add(etiqueta9); f.getContentPane().add(etiqueta10); etiqueta1.setForeground(new Color(255,255,0)); etiqueta2.setForeground(Color.YELLOW); etiqueta3.setForeground(new Color(255,255,255)); etiqueta4.setForeground(Color.WHITE); etiqueta5.setForeground(new Color(0,0,0)); etiqueta6.setForeground(Color.BLACK); etiqueta7.setForeground(Color.RED); etiqueta8.setForeground(Color.BLUE); etiqueta9.setForeground(Color.GREEN); etiqueta10.setForeground(Color.GRAY); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }// end main() }///:~
Pgina 79
Pgina 80
CLASE MouseAdapter
Los eventos de Mouse nos cuentan cuando el usuario usa el ratn (o un dispositivo de entrada similar) para interactuar con un componente. Los eventos Mouse ocurren cuando el cursor entra o sale del rea de pantalla de un componente, o cuando el usuario pulsa o libera el botn del ratn. Como seguir la pista del movimiento del ratn significa mas sobrecarga del sistema que seguir la pista de los eventos de ratn, los eventos MouseMotion se han separado en otro tipo de oyente (MouseMotionListener). El interface MouseListener y su correspondiente clase adaptadora, MouseAdapter, contienen estos mtodos: void mouseClicked(MouseEvent): Llamado justo despus de que el usario pulse sobre el componente escuchado. void mouseEntered(MouseEvent): Llamado justo despus de que el cursor entre en los lmites del componente escuchado. void mouseExited(MouseEvent): Llamado justo despus de que el cursor salga de los lmites del componente escuchado. void mousePressed(MouseEvent): Llamado justo despus de que el usuario pulse un botn del ratn mientras el cursor est sobre el componente escuchado. void mouseReleased(MouseEvent): Llamado justo despus de que el usuario libere un botn del ratn despus de una pulsacin sobre el componente esuchado.
Pgina 81
Pgina 82
CLASE ImageIcon
Java permite incorporar imgenes de tipo gif, jpg y png definidas en archivos. Se dispone para ello de la clase javax.swing.ImageIcon. Algunos componentes Swing, como JLabel y JButton, pueden ser decorados con un icono -- una imagen de tamao fijo. En Swing, un icono es un objeto que se adhiere al interface Icon. Swing proporciona una implementacin particularmente til del interface Icon.
Pgina 83
Pgina 84
Pgina 85
Las formas tercera y cuarta permiten definir una zona rectangular de la ventana a la que aplicar el mtodo. El nico argumento de los mtodos update() y paint() es un objeto de esta clase. La clase Graphics dispone de mtodos para soportar dos tipos de grficos: 1. Dibujo de primitivas grficas (texto, lneas, crculos, rectngulos, polgonos, ). 2. Presentacin de imgenes en formatos *.gif y *.jpeg. Adems, la clase Graphics mantiene un contexto grfico: un rea de dibujo actual, un color de dibujo del background y otro del foreground, un font con todas sus propiedades, etc. La siguiente Figura muestra el sistema de coordenadas utilizado en Java. Como es habitual en Informtica, los ejes estn situados en la esquina superior izquierda, con la orientacin indicada en la Figura (eje de coordenadas descendente). Las coordenadas se miden siempre en pixels.
Pgina 86
Ejemplo: g.fillRect(25,25,100,20);
Java dispone de mtodos para realizar dibujos sencillos, llamados a veces primitivas grficas. Como se ha dicho, las coordenadas se miden en pixels, empezando a contar desde cero. La clase Graphics dispone de los mtodos para primitivas grficas reseados en la siguiente Tabla. Excepto los polgonos y las lneas, todas las formas geomtricas se determinan por el rectngulo que las comprende, cuyas dimensiones son w y h. Los polgonos admiten un argumento de la clase java.awt.Polygon.
La clase Graphics permite dibujar texto, como alternativa al texto mostrado en los componentes JLabel, JTextField y JTextArea. Los mtodos de esta clase para dibujar texto son los siguientes: drawBytes(byte data[], int offset, int length, int x, int y);
Pgina 87
Pgina 88
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MouseAdapterTest2 extends JFrame { private int xPos, yPos; //private JLabel etiqueta; public MouseAdapterTest2(){ super("Clics y botones del ratn"); //Container contenedor= getContentPane(); addMouseListener(new ManejadorClicsRaton()); //etiqueta= new JLabel(""); //contenedor.add(etiqueta); setSize(450,150); setVisible(true); }// fin del constructor // dibujar objeto String en la ubicacin donde se hizo clic con el ratn public void paint(Graphics g){ // llamar al mtodo paint de la superclase super.paint(g); g.drawString("Se hizo clic en: [" + xPos + ", " + yPos + "]",xPos,yPos); } // clase interna para manejar eventos de ratn private class ManejadorClicsRaton extends MouseAdapter { // manejar evento de clic del ratn y determinar cul botn se oprimi public void mouseClicked(MouseEvent evento){ xPos = evento.getX(); yPos = evento.getY(); String titulo = "Se hizo clic " + evento.getClickCount() + " Veces" ; //String titulo2 = "Se hizo clic en: [" + xPos + ", " + yPos + "]"; if (evento.isMetaDown())// botn derecho del ratn titulo += " con el botn derecho del ratn"; else if (evento.isAltDown())// botn de en medio del ratn titulo += " con el botn central del ratn"; else // botn izquierdo del ratn titulo += " con el botn izquierdo del ratn"; //etiqueta.setText(titulo2); setTitle(titulo); // establecer barra de ttulo de la ventana repaint(); //repinta el componente actual } // fin del mtodo mouseClicked } // fin de la clase interna privada ManejadorClicsRaton
Pgina 89
Observar que cada vez que se d clic en un a nueva posicin del JFrame se repinta el mensaje de las coordenadas.
Pgina 90
Pgina 91
Existen los siguientes Look & Feel: Java look & feel CDE/Motif look & feel Windows look & feel
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.Windows LookAndFeel");
Pgina 92
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
Pgina 93
//UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); //UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); SwingUtilities.updateComponentTreeUI(f); } // procesar problemas al cambiar la apariencia visual catch ( Exception excepcion ) { excepcion.printStackTrace(); } JMenuBar menuBar=new JMenuBar(); f.setJMenuBar(menuBar); //Sets the menuBar for this frame. /*NOMBRE DE LOS // establecer JMenu menu1=new JMenu menu2=new MENUS*/ men Archivo y sus elementos de men JMenu("Menu1"); menu1.setMnemonic('1'); JMenu("Menu2"); menu2.setMnemonic('e');
/*ELEMENTOS DEL MENU1*/ JMenuItem menuItem1= new JMenuItem("Opcion1"); JMenuItem menuItem2= new JMenuItem("Opcion2"); //SE AGREGAN AL menu1 menu1.add(menuItem1); menu1.add(menuItem2); /*ELEMENTOS DEL MENU2*/ JCheckBoxMenuItem jcbmenuItem1= new JCheckBoxMenuItem("Opcion1"); JCheckBoxMenuItem jcbmenuItem2= new JCheckBoxMenuItem("Opcion2",true);
JRadioButtonMenuItem jcbmenuItem3= new JRadioButtonMenuItem("Opcion3",true);
//SE AGREGAN AL menu2 menu2.add(jcbmenuItem1); menu2.add(jcbmenuItem2); menu2.addSeparator(); //Agrega un separador menu2.add(jcbmenuItem3); /*MENU 1 Y MENU2 SE AGREGAN AL MENUBAR*/ menuBar.add(menu1); menuBar.add(menu2); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }//end main() }///:~
Pgina 94
/*ELEMENTOS DEL MENU1*/ JMenuItem menuItem1= new JMenuItem("Opcion1"); JMenuItem menuItem2= new JMenuItem("Opcion2"); //SE AGREGAN AL menu1 menu1.add(menuItem1); menu1.add(menuItem2); /*ELEMENTOS DEL MENU2*/ JCheckBoxMenuItem jcbmenuItem1= new JCheckBoxMenuItem("Opcion1"); JCheckBoxMenuItem jcbmenuItem2= new JCheckBoxMenuItem("Opcion2",true);
JRadioButtonMenuItem jcbmenuItem3= new JRadioButtonMenuItem("Opcion3",true);
//SE AGREGAN AL menu2 menu2.add(jcbmenuItem1); menu2.add(jcbmenuItem2); menu2.addSeparator(); //Agrega un separador menu2.add(jcbmenuItem3); /*MENU 1 Y MENU2 SE AGREGAN AL MENUBAR*/ menuBar.add(menu1); menuBar.add(menu2); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }//end main() }///:~
Pgina 95
Pgina 96
Pgina 97
Pgina 98
Pgina 99
HEIGHT="150">
Pgina 100
Luego se abrio una ventana de otra aplicacin la cual era ms grande que la del Applet, y se selecciono para hacerla visible dando clic en la ventana minimizada en a barra de tareas de Windows. Con esto se ejecut el mtodo paint(). Para este ejemplo se hizo lo mismo 4 veces ms obteniendose en la salida de la consola 4 veces el mtodo paint().
Pgina 101
Cuando se restauro de nueva cuanta el Applet se ejecutaron los mtodos start() y paint().
Pgina 102
Pgina 103
= "Nombre archivo de clase" = "Ruta (URL) a los archivos de clase" = "Alineacin del Applet" = "Ancho en pixeles del Applet" = "Alto en pixeles del Applet" > = "nombre del parmetro" value = "valor del parmetro">
En la etiqueta <APPLET></APPLET> algunos argumentos permiten modificar la ubicacin del espacio que ocupa el applet en una pgina Web, algunos de estos atributos son: ALIGN, determina la alineacin del applet, los valores que toma son: LEFT, RIGHT, TEXTTOP, MIDDLE, BASELINE, BOTTOM, ABSBOTTOM, TOP, ABSMIDDLE, as por ejemplo, <APPLET ALIGN=LEFT> coloca el applet haca la izquierda y el texto adelante del mismo. Si agregamos la etiqueda <BR> el texto se coloca despus del applet si se
Pgina 104
AppletTest2.html <HTML> <HEAD> <TITLE>Applet Hola</TITLE> </HEAD> <BODY> <P>Applet con javax.swing de bienvenida</P> <APPLET CODE=AppletTest2.class WIDTH=500 HEIGHT=100> </APPLET> </BODY> </HTML>
Pgina 105
En el siguiente ejemplo se crea una aplicacin convencional con JFrame y despus es pasada a Applet para identificar qu partes del cdigo fuente sufren cambios para que sea interpretada como applet.
Pgina 106
Pgina 107
Pgina 108
Pgina 109
Pgina 110
Donde estamos enviando dos parmetros; uno llamado "figura" y otro "radio" con sus valores "circulo" y "50.0" respectivamente. Como el mtodo getParameter() regresa un objeto de la clase String, en el caso de "50.0" , este ser una cadena y no un nmero, esto es, no ser un valor de tipo double o float, si queremos convertirlo a esos tipos hay que utilizar mtodos de conversin de tipos disponibles en las clases Wrapper Double o Float.
Pgina 111
Pgina 112
Pgina 113