Uso Del Paquete Swing Windows
Uso Del Paquete Swing Windows
Uso Del Paquete Swing Windows
El paquete Swing es parte de la JFC (Java Foundation Classes) en la plataforma Java. La JFC provee
facilidades para ayudar a la gente a construir GUIs. Swing abarca componentes como botones, tablas,
marcos, etc...
Swing existe desde la JDK 1.1 (como un agregado). Antes de la existencia de Swing, las interfaces
gráficas con el usuario se realizaban a través de AWT (Abstract Window Toolkit), de quien Swing
hereda todo el manejo de eventos. Usualmente, para toda componente AWT existe una componente
Swing que la reemplaza, por ejemplo, la clase Button de AWT es reemplazada por la clase JButton de
Swing (el nombre de todas las componentes Swing comienza con "J").
Las componentes de Swing utilizan la infraestructura de AWT, incluyendo el modelo de eventos AWT,
el cual rige cómo una componente reacciona a eventos tales como, eventos de teclado, mouse, etc...
Es por esto, que la mayoría de los programas Swing necesitan importar dos paquetes AWT: java.awt.*
y java.awt.event.*.
Ojo: Como regla, los programas no deben usar componenetes pesados de AWT junto a componentes
Swing, ya que los componentes de AWT son siempre pintados sobre los de Swing. (Por componentes
pesadas de AWT se entiende Menu, ScrollPane y todas las componentes que heredan de las clases
Canvas y Panel de AWT).
Una aplicación Swing se construye mezclando componentes con las siguientes reglas.
• Debe existir, al menos, un contenedor de alto nivel (Top-Level Container), que provee el
soporte que las componentes Swing necesitan para el pintado y el manejo de eventos.
• Otras componentes colgando del contenedor de alto nivel (éstas pueden ser contenedores
o componentes simples).
Ejemplo 1:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addWindowListener(new java.awt.event.WindowAdapter(){
public void windowClosing(WindowEvent e){
ULADECH - Escuela de Ingeniería de Sistemas PROGRAMACION VISUAL I
System.exit(0);
}
}
);
frame.pack();
frame.setVisible(true);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
Luego se declara la clase HolaMundoSwing y en el método main se setea el top level container:
En el ejemplo, sólo hay un contenedor de alto nivel, un JFrame. Un frame implementado como una
instancia de la clase JFrame es una ventana con decoraciones, tales como, borde, título y botones
como íconos y para cerrar la ventana. Aplicaciones con un GUI típicamente usan, al menos, un frame.
Además, el ejemplo tiene un componente, una etiqueta que dice "Hola Mundo".
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //JDK
1.3+
ULADECH - Escuela de Ingeniería de Sistemas PROGRAMACION VISUAL I
frame.addWindowListener(new java.awt.event.WindowAdapter(){
//versiones anteriores
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
Como ya se dijo antes, cada aplicación Swing debe tener al menos un top-level container que
contendrá toda la aplicación, estos pueden ser
A un contenedor se le pueden agregar otros contenedores o componentes simples, para ver una
muestra visual de cada componente y sus respectivas descripciones presione aquí
Swing permite setear dinámicamente el aspecto y la forma de interacción de una aplicación, por
ejemplo el siguiente código setea el L&F al estilo Java
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName())
Varias componentes pueden contener otras componentes dentro, para determinar de qué modo
esas componentes se organizarán visualmente se utiliza el concepto de Layout. Por ejemplo, el
siguiente código crea un frame y setea el layout del paño de contenidos (porción central de la
ventana) con BorderLayout y finalmente agrega una etiqueta al sur de la ventana.
ULADECH - Escuela de Ingeniería de Sistemas PROGRAMACION VISUAL I
Manejando eventos
Cada vez que el usuario interactúa con la aplicación se gatilla un evento, para que una componente
determinada reaccione frente a un evento, debe poseer un "escuchador" con, al menos, un método
determinado que se ejecutará al escuchar un evento en particular, por ejemplo, en el siguiente
código se crea un botón que al ser presionado imprime en la salida estándar un mensaje.
Swing puede generar un variado set de eventos, en la siguiente tabla se resumen los más comunes
con sus respectivos "escuchadores".
ULADECH - Escuela de Ingeniería de Sistemas PROGRAMACION VISUAL I
Threads y Swing
Como regla general sólo un thread debe accesar una componente Swing, para lograr esto, la receta
es que sólo el thread que atiende los eventos invoque los métodos de las componentes.
//Ejemplo Thread-safe
...
//Toda la manipulación de la GUI -- setText, getText, etc.
//es efectuada por manejadores de eventos como actionPerformed().
...
}
Nota: algunos métodos dentro de la API de Swing están marcados como "thread safe", éstos pueden
ser invocados concurrentemente por cualquier thread, el texto que indica esto es: "This method is
thread safe, although most Swing methods are not."
ULADECH - Escuela de Ingeniería de Sistemas PROGRAMACION VISUAL I
Interfaces
Action
BoundedRangeModel
ButtonModel
CellEditor
ComboBoxEditor
ComboBoxModel
DesktopManager
Icon
JComboBox.KeySelectionManager
ListCellRenderer
ListModel
ListSelectionModel
MenuElement
MutableComboBoxModel
Renderer
RootPaneContainer
Scrollable
ScrollPaneConstants
SingleSelectionModel
SwingConstants
UIDefaults.ActiveValue
UIDefaults.LazyValue
WindowConstants
Clases
AbstractAction
AbstractButton
AbstractCellEditor
AbstractListModel
ActionMap
BorderFactory
Box
Box.Filler
BoxLayout
ButtonGroup
CellRendererPane
ComponentInputMap
ULADECH - Escuela de Ingeniería de Sistemas PROGRAMACION VISUAL I
DebugGraphics
DefaultBoundedRangeModel
DefaultButtonModel
DefaultCellEditor
DefaultComboBoxModel
DefaultDesktopManager
DefaultFocusManager
DefaultListCellRenderer
DefaultListCellRenderer.UIResource
DefaultListModel
DefaultListSelectionModel
DefaultSingleSelectionModel
FocusManager
GrayFilter
ImageIcon
InputMap
InputVerifier
JApplet
JButton
JCheckBox
JCheckBoxMenuItem
JColorChooser
JComboBox
JComponent
JDesktopPane
JDialog
JEditorPane
JFileChooser
JFrame
JInternalFrame
JInternalFrame.JDesktopIcon
JLabel
JLayeredPane
JList
JMenu
JMenuBar
JMenuItem
JOptionPane
JPanel
JPasswordField
JPopupMenu
JPopupMenu.Separator
JProgressBar
JRadioButton
ULADECH - Escuela de Ingeniería de Sistemas PROGRAMACION VISUAL I
JRadioButtonMenuItem
JRootPane
JScrollBar
JScrollPane
JSeparator
JSlider
JSplitPane
JTabbedPane
JTable
JTextArea
JTextField
JTextPane
JToggleButton
JToggleButton.ToggleButtonModel
JToolBar
JToolBar.Separator
JToolTip
JTree
JTree.DynamicUtilTreeNode
JTree.EmptySelectionModel
JViewport
JWindow
KeyStroke
LookAndFeel
MenuSelectionManager
OverlayLayout
ProgressMonitor
ProgressMonitorInputStream
RepaintManager
ScrollPaneLayout
ScrollPaneLayout.UIResource
SizeRequirements
SizeSequence
SwingUtilities
Timer
ToolTipManager
UIDefaults
UIDefaults.LazyInputMap
UIDefaults.ProxyLazyValue
UIManager
UIManager.LookAndFeelInfo
ViewportLayout
ULADECH - Escuela de Ingeniería de Sistemas PROGRAMACION VISUAL I
Excepciones
UnsupportedLookAndFeelException
Está claro que hay muchas más clases de las de swing. Además hay muchas que tienen el mismo
nombre de algunas clases de awt, excepto una J inicial, como, por ejemplo, JFrame, JDialog, etc. Estas
clases funcionan igual que las de awt, pero contienen muchos métodos más útiles.