65
Crear un Modelo y Asignarlo a una JList 1. JList lista = new JList(); 2. DefaultListModel modelo = new DefaultListModel(); 3. for(int i = 1; i<=10; i++){ 4. modelo.addElement(i); 5. } 6. lista.setModel(modelo); Este ejemplo mostrará una JList con números del 1 al 10. En este caso creamos primero una lista y luego un modelo. Añadimos los elementos al modelo y finalmente asignamos el modelo a la JList. Otro Método Hay más formas para crear una JList en java. En este caso tenemos los elementos dentro de un array, llamamos el constructor JList y se lo pasamos como parámetro. ver en popup copiar a portapapeles imprimir 1. String [] elementos = {"a","b","c","d"}; 2. javax.swing.JList list = new javax.swing.JList(elementos); public class JList extends JComponent implements Scrollable , Accessible A component that allows the user to select one or more objects from a list. A separate model, ListModel, represents the contents of the list. It's easy to display an array or vector of objects, using a JList constructor that builds a ListModel instance for you: // Create a JList that displays the strings in data[] String[] data = {"one", "two", "three", "four"}; JList dataList = new JList(data); // The value of the JList model property is an object that provides // a read-only view of the data. It was constructed automatically.

Crear Un Modelo y Asignarlo a Una JList

Embed Size (px)

Citation preview

Page 1: Crear Un Modelo y Asignarlo a Una JList

Crear un Modelo y Asignarlo a una JList1 JList lista = new JList() 2 DefaultListModel modelo = new DefaultListModel() 3 for(int i = 1 ilt=10 i++) 4 modeloaddElement(i) 5 6 listasetModel(modelo)

Este ejemplo mostraraacute una JList con nuacutemeros del 1 al 10 En este caso creamos primero una lista y luego un modelo Antildeadimos los elementos al modelo y finalmente asignamos el modelo a la JList

Otro Meacutetodo

Hay maacutes formas para crear una JList en java En este caso tenemos los elementos dentro de un array llamamos el constructor JList y se lo pasamos como paraacutemetro

ver en popup copiar a portapapeles imprimir 1 String [] elementos = abcd 2 javaxswingJList list = new javaxswingJList(elementos)

public class JList extends JComponent implements Scrollable Accessible

A component that allows the user to select one or more objects from a list A separate model ListModel represents the contents of the list Its easy to display an array or vector of objects using a JList constructor that builds a ListModel instance for you

Create a JList that displays the strings in data[]

String[] data = one two three four JList dataList = new JList(data) The value of the JList model property is an object that provides a read-only view of the data It was constructed automatically

for(int i = 0 i lt dataListgetModel()getSize() i++) Systemoutprintln(dataListgetModel()getElementAt(i))

Create a JList that displays the superclass of JListclass We store the superclasses in a javautilVector

Vector superClasses = new Vector() Class rootClass = javaxswingJListclass for(Class cls = rootClass cls = null cls = clsgetSuperclass()) superClassesaddElement(cls)

JList classList = new JList(superClasses)

JList doesnt support scrolling directly To create a scrolling list you make the JList the viewport view of a JScrollPane For example

JScrollPane scrollPane = new JScrollPane(dataList) Or in two steps JScrollPane scrollPane = new JScrollPane() scrollPanegetViewport()setView(dataList)

By default the JList selection model allows any combination of items to be selected at a time using the constant MULTIPLE_INTERVAL_SELECTION The selection state is actually managed by a separate delegate object an instance of ListSelectionModel However JList provides convenient properties for managing the selection

String[] data = one two three four JList dataList = new JList(data)

dataListsetSelectedIndex(1) select two dataListgetSelectedValue() returns two

The contents of a JList can be dynamic in other words the list elements can change value and the size of the list can change after the JList has been created The JList observes changes in its model with a swingeventListDataListener implementation A correct implementation of ListModel notifies its listeners each time a change occurs The changes are characterized by a swingeventListDataEvent which identifies the range of list indices that have been modified added or removed Simple dynamic-content JList applications can use the DefaultListModel class to store list elements This class implements the ListModel interface and provides the javautilVector API as well Applications that need to provide custom ListModel implementations can subclass AbstractListModel which provides basic ListDataListener support For example

This list model has about 2^16 elements Enjoy scrolling

ListModel bigData = new AbstractListModel() public int getSize() return ShortMAX_VALUE public Object getElementAt(int index) return Index + index

JList bigDataList = new JList(bigData)

We dont want the JList implementation to compute the width or height of all of the list cells so we give it a string thats as big as well need for any cell It uses this to compute values for the fixedCellWidth and fixedCellHeight properties

bigDataListsetPrototypeCellValue(Index 1234567890)

JList uses a javaawtComponent provided by a delegate called the cellRendererer to paint the visible cells in the list The cell renderer component is used like a rubber stamp to paint each visible row Each time the JList needs to paint a cell it asks the cell renderer for the component moves it into place using setBounds() and then draws it by calling its paint method The default cell renderer uses a JLabel component to render the string value of each component You can substitute your own cell renderer using code like this

Display an icon and a string for each object in the list

class MyCellRenderer extends JLabel implements ListCellRenderer final static ImageIcon longIcon = new ImageIcon(longgif) final static ImageIcon shortIcon = new ImageIcon(shortgif)

This is the only method defined by ListCellRenderer We just reconfigure the JLabel each time were called

public Component getListCellRendererComponent( JList list Object value value to display int index cell index boolean isSelected is the cell selected boolean cellHasFocus) the list and the cell have the focus String s = valuetoString() setText(s) setIcon((slength() gt 10) longIcon shortIcon) if (isSelected) setBackground(listgetSelectionBackground())

setForeground(listgetSelectionForeground())

else setBackground(listgetBackground()) setForeground(listgetForeground()) setEnabled(listisEnabled()) setFont(listgetFont())

setOpaque(true) return this

String[] data = one two three four JList dataList = new JList(data) dataListsetCellRenderer(new MyCellRenderer())

JList doesnt provide any special support for handling double or triple (or N) mouse clicks however its easy to handle them using a MouseListener Use the JList method locationToIndex() to determine what cell was clicked For example

final JList list = new JList(dataModel) MouseListener mouseListener = new MouseAdapter() public void mouseClicked(MouseEvent e) if (egetClickCount() == 2) int index = listlocationToIndex(egetPoint()) Systemoutprintln(Double clicked on Item + index) listaddMouseListener(mouseListener)

Note that in this example the dataList is final because its referred to by the anonymous MouseListener class

For the keyboard keys used by this component in the standard look and feel (LampF) renditions see the JList key assignments

How to Use ListsA JList presents the user with a group of items displayed in one or more columns to choose from Lists can have many items so they are often put in scroll panes

In addition to lists the following Swing components present multiple selectable items to the user combo boxes menus tables and groups of check boxes or radio buttons To display hierarchical data use a tree

The following figures shows two applications that use lists This section uses these examples as a basis for the discussions that follow

ListDialog (used by ListDialogRunner)

ListDemo

Try this

1 Click the Launch button to run ListDemo using Javatrade Web Start (download JDK 6) Alternatively to compile and run the example yourself consult the example index

2 Click the Launch button to run ListDialogRunner Alternatively to compile and run the example yourself consult the example index

3 To bring up the ListDialog click the Pick a new name button in the window titled Name That Baby The resulting dialog is a ListDialog instance that has been customized to have the title Name Chooser

4 In ListDemo try adding (hiring) and removing (firing) a few items

This rest of this section discusses the following topics

Creating a Model Initializing a List Selecting Items in a List Adding Items to and Removing Items from a List Writing a Custom Cell Renderer The List API Examples that Use Lists

Creating a ModelThere are three ways to create a list model

DefaultListModel mdash everything is pretty much taken care of for you The examples in this page use DefaultListModel

AbstractListModel mdash you manage the data and invoke the fire methods For this approach you must subclass AbstractListModel and implement the getSize and getElementAt methods inherited from the ListModel interface

ListModel mdash you manage everything

Initializing a ListHere is the code from ListDialogjava that creates and sets up its list

list = new JList(data) data has type Object[]listsetSelectionMode(ListSelectionModelSINGLE_INTERVAL_SELECTION)listsetLayoutOrientation(JListHORIZONTAL_WRAP)listsetVisibleRowCount(-1)

JScrollPane listScroller = new JScrollPane(list)listScrollersetPreferredSize(new Dimension(250 80))The code passes an array to the lists constructor The array is filled with strings that were passed in from another object In our example the strings happen to be boys names

Other JList constructors let you initialize a list from a Vector or from an object that adheres to the ListModel interface If you initialize a list with an array or vector the constructor implicitly creates a default list model The default list model is immutable mdash you cannot add remove or replace items in the list To create a list whose items can be changed individually set the lists model to an instance of a mutable list model class such as an instance of DefaultListModel You can set a lists model when you create the list or by calling the setModel method See Adding Items to and Removing Items from a List for an example

The call to setSelectionMode specifies how many items the user can select and whether they must be contiguous the next section tells you more about selection modes

The call to setLayoutOrientation lets the list display its data in multiple columns The value JListHORIZONTAL_WRAP specifies that the list should display its items from left to right before wrapping to a new row Another possible value is JListVERTICAL_WRAP which specifies that the data be displayed from top to bottom (as usual) before wrapping to a new column The following figures show these two wrapping possibilities together with the default JListVERTICAL

HORIZONTAL_WRAP VERTICAL_WRAP VERTICAL

In combination with the call to setLayoutOrientation invoking setVisibleRowCount(-1) makes the list display the maximum number of items possible in the available space onscreen Another common use of setVisibleRowCount is to specify to the listss scroll pane how many rows the list prefers to display

Selecting Items in a ListA list uses an instance of ListSelectionModel to manage its selection By default a list selection model allows any combination of items to be selected at a time You can specify a different selection mode by calling the setSelectionMode method on the list For example both ListDialog and ListDemo set the selection mode to SINGLE_SELECTION (a constant defined by ListSelectionModel) so that only one item in the list can be selected The following table describes the three list selection modes

Mode Description

SINGLE_SELECTION Only one item can be selected at a time When the user selects an item any previously selected item is deselected first

SINGLE_INTERVAL_SELECTION Multiple contiguous items can be selected When the user begins a new selection range any previously selected items are deselected first

MULTIPLE_INTERVAL_SELECTION The default Any combination of items can be selected The user must explicitly deselect items

No matter which selection mode your list uses the list fires list selection events whenever the selection changes You can process these events by adding a list selection listener to the list with the addListSelectionListener method A list selection listener must implement one method valueChanged Here is the valueChanged method for the listener in ListDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting() == false)

if (listgetSelectedIndex() == -1) No selection disable fire button fireButtonsetEnabled(false)

else Selection enable the fire button fireButtonsetEnabled(true) Many list selection events can be generated from a single user action such as a mouse click The getValueIsAdjusting method returns true if the user is still manipulating the selection This particular program is interested only in the final result of the users action so the valueChanged method does something only if getValueIsAdjusting returns false

Because the list is in single-selection mode this code can use getSelectedIndex to get the index of the just-selected item JList provides other methods for setting or getting the selection when the selection mode allows more than one item to be selected If you want you can listen for events on the lists list selection model rather than on the list itself ListSelectionDemo is an example that shows how to listen for list selection events on the list selection model and lets you change the selection mode of a list dynamically

Adding Items to and Removing Items from a ListThe ListDemo example that we showed previously features a list whose contents can change You can find the source code for ListDemo in ListDemojava Here is the ListDemo code that creates a mutable list model object puts the initial items in it and uses the list model to create a list

listModel = new DefaultListModel()listModeladdElement(Jane Doe)listModeladdElement(John Smith)listModeladdElement(Kathy Green)

list = new JList(listModel)This particular program uses an instance of DefaultListModel a class provided by Swing In spite of the class name a list does not have a DefaultListModel unless your program explicitly makes it so If DefaultListModel does not suit your needs you can write a custom list model which must adhere to the ListModel interface

The following code snippet shows the actionPerformed method for the action listener registered on the Fire button The bold line of code removes the selected item in the list The remaining lines in the method disable the fire button if the list is now empty and make another selection if it is not

public void actionPerformed(ActionEvent e) int index = listgetSelectedIndex() listModelremove(index)

int size = listModelgetSize()

if (size == 0) Nobodys left disable firing fireButtonsetEnabled(false)

else Select an index if (index == listModelgetSize()) removed item in last position index--

listsetSelectedIndex(index) listensureIndexIsVisible(index)

Here is the actionPerformed method for the action listener shared by the Hire button and the text field

public void actionPerformed(ActionEvent e) String name = employeeNamegetText()

User did not type in a unique name if (nameequals() || alreadyInList(name)) ToolkitgetDefaultToolkit()beep() employeeNamerequestFocusInWindow() employeeNameselectAll() return

int index = listgetSelectedIndex() get selected index if (index == -1) no selection so insert at beginning index = 0 else add after the selected item index++

listModelinsertElementAt(employeeNamegetText() index)

Reset the text field employeeNamerequestFocusInWindow() employeeNamesetText()

Select the new item and make it visible listsetSelectedIndex(index) listensureIndexIsVisible(index)This code uses the list models insertElementAt method to insert the new name after the current selection or if no selection exists at the beginning of the list If you just wish to add to the end of the list you can use DefaultListModels addElement method instead

Whenever items are added to removed from or modified in a list the list model fires list data events Refer to How to Write a List Data Listener for information about listening for these events That section contains an example that is similar to ListDemo but adds buttons that move items up or down in the list

Writing a Custom Cell RendererA list uses an object called a cell renderer to display each of its items The default cell renderer knows how to display strings and icons and it displays Objects by invoking toString If you want to change the way the default renderer display icons or strings or if you want behavior different than what is provided by toString you can implement a custom cell renderer Take these steps to provide a custom cell renderer for a list

Write a class that implements the ListCellRenderer interface Create an instance of your class and call the lists setCellRenderer using the instance as

an argument

We do not provide an example of a list with a custom cell renderer but we do have an example of a combo box with a custom renderer mdash and combo boxes use the same type of renderer as lists See the example described in Providing a Custom Renderer

The List API The following tables list the commonly used JList constructors and methods Other methods you are most likely to invoke on a JList object are those such as setPreferredSize that its superclasses provide See The JComponent API for tables of commonly used inherited methods

Much of the operation of a list is managed by other objects The items in the list are managed by a list model object the selection is managed by a list selection model object and most programs put a list in a scroll pane to handle scrolling For the most part you do not need to worry about the models because JList creates them as necessary and you interact with them implicitly with JLists convenience methods

That said the API for using lists falls into these categories

Initializing List Data Displaying the List Managing the Lists Selection Managing List Data

Initializing List Data

Method or Constructor

Purpose

JList(ListModel) JList(Object[]) JList(Vector) JList()

Create a list with the initial list items specified The second and third constructors implicitly create an immutable ListModel you should not subsequently modify the passed-in array or Vector

void setModel(ListModel) ListModel getModel()

Set or get the model that contains the contents of the list

void setListData(Object[]) void setListData(Vector)

Set the items in the list These methods implicitly create an immutable ListModel

Displaying the List

Method Purpose

void setVisibleRowCount(int) int getVisibleRowCount()

Set or get the visibleRowCount property For a VERTICAL layout orientation this sets or gets the preferred number of rows to display without requiring scrolling For the HORIZONTAL_WRAP or VERTICAL_WRAP layout orientations it defines how the cells wrap See the setLayoutOrientation(int) for more information The default value of this property is VERTICAL

void setLayoutOrientation(int) int getLayoutOrientation()

Set or get the way list cells are laid out The possible layout formats are specified by the JList-defined values VERTICAL (a single column of cells the default) HORIZONTAL_WRAP (newspaper style with the content flowing horizontally then vertically) and VERTICAL_WRAP (newspaper style with the content flowing vertically then horizontally)

int getFirstVisibleIndex() int getLastVisibleIndex()

Get the index of the first or last visible item

void ensureIndexIsVisible(int)

Scroll so that the specified index is visible within the viewport that this list is in

Managing the Lists Selection

Method Purpose

void addListSelectionListener(ListSelectionListener)

Register to receive notification of selection changes

void setSelectedIndex(int) void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectionInterval(int int)

Set the current selection as indicated Use setSelectionMode to set what ranges of selections are acceptable The boolean argument specifies whether the list should attempt to scroll itself so that the selected item is visible

int getAnchorSelectionIndex() int getLeadSelectionIndex() int getSelectedIndex() int getMinSelectionIndex() int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Get information about the current selection as indicated

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 2: Crear Un Modelo y Asignarlo a Una JList

JList classList = new JList(superClasses)

JList doesnt support scrolling directly To create a scrolling list you make the JList the viewport view of a JScrollPane For example

JScrollPane scrollPane = new JScrollPane(dataList) Or in two steps JScrollPane scrollPane = new JScrollPane() scrollPanegetViewport()setView(dataList)

By default the JList selection model allows any combination of items to be selected at a time using the constant MULTIPLE_INTERVAL_SELECTION The selection state is actually managed by a separate delegate object an instance of ListSelectionModel However JList provides convenient properties for managing the selection

String[] data = one two three four JList dataList = new JList(data)

dataListsetSelectedIndex(1) select two dataListgetSelectedValue() returns two

The contents of a JList can be dynamic in other words the list elements can change value and the size of the list can change after the JList has been created The JList observes changes in its model with a swingeventListDataListener implementation A correct implementation of ListModel notifies its listeners each time a change occurs The changes are characterized by a swingeventListDataEvent which identifies the range of list indices that have been modified added or removed Simple dynamic-content JList applications can use the DefaultListModel class to store list elements This class implements the ListModel interface and provides the javautilVector API as well Applications that need to provide custom ListModel implementations can subclass AbstractListModel which provides basic ListDataListener support For example

This list model has about 2^16 elements Enjoy scrolling

ListModel bigData = new AbstractListModel() public int getSize() return ShortMAX_VALUE public Object getElementAt(int index) return Index + index

JList bigDataList = new JList(bigData)

We dont want the JList implementation to compute the width or height of all of the list cells so we give it a string thats as big as well need for any cell It uses this to compute values for the fixedCellWidth and fixedCellHeight properties

bigDataListsetPrototypeCellValue(Index 1234567890)

JList uses a javaawtComponent provided by a delegate called the cellRendererer to paint the visible cells in the list The cell renderer component is used like a rubber stamp to paint each visible row Each time the JList needs to paint a cell it asks the cell renderer for the component moves it into place using setBounds() and then draws it by calling its paint method The default cell renderer uses a JLabel component to render the string value of each component You can substitute your own cell renderer using code like this

Display an icon and a string for each object in the list

class MyCellRenderer extends JLabel implements ListCellRenderer final static ImageIcon longIcon = new ImageIcon(longgif) final static ImageIcon shortIcon = new ImageIcon(shortgif)

This is the only method defined by ListCellRenderer We just reconfigure the JLabel each time were called

public Component getListCellRendererComponent( JList list Object value value to display int index cell index boolean isSelected is the cell selected boolean cellHasFocus) the list and the cell have the focus String s = valuetoString() setText(s) setIcon((slength() gt 10) longIcon shortIcon) if (isSelected) setBackground(listgetSelectionBackground())

setForeground(listgetSelectionForeground())

else setBackground(listgetBackground()) setForeground(listgetForeground()) setEnabled(listisEnabled()) setFont(listgetFont())

setOpaque(true) return this

String[] data = one two three four JList dataList = new JList(data) dataListsetCellRenderer(new MyCellRenderer())

JList doesnt provide any special support for handling double or triple (or N) mouse clicks however its easy to handle them using a MouseListener Use the JList method locationToIndex() to determine what cell was clicked For example

final JList list = new JList(dataModel) MouseListener mouseListener = new MouseAdapter() public void mouseClicked(MouseEvent e) if (egetClickCount() == 2) int index = listlocationToIndex(egetPoint()) Systemoutprintln(Double clicked on Item + index) listaddMouseListener(mouseListener)

Note that in this example the dataList is final because its referred to by the anonymous MouseListener class

For the keyboard keys used by this component in the standard look and feel (LampF) renditions see the JList key assignments

How to Use ListsA JList presents the user with a group of items displayed in one or more columns to choose from Lists can have many items so they are often put in scroll panes

In addition to lists the following Swing components present multiple selectable items to the user combo boxes menus tables and groups of check boxes or radio buttons To display hierarchical data use a tree

The following figures shows two applications that use lists This section uses these examples as a basis for the discussions that follow

ListDialog (used by ListDialogRunner)

ListDemo

Try this

1 Click the Launch button to run ListDemo using Javatrade Web Start (download JDK 6) Alternatively to compile and run the example yourself consult the example index

2 Click the Launch button to run ListDialogRunner Alternatively to compile and run the example yourself consult the example index

3 To bring up the ListDialog click the Pick a new name button in the window titled Name That Baby The resulting dialog is a ListDialog instance that has been customized to have the title Name Chooser

4 In ListDemo try adding (hiring) and removing (firing) a few items

This rest of this section discusses the following topics

Creating a Model Initializing a List Selecting Items in a List Adding Items to and Removing Items from a List Writing a Custom Cell Renderer The List API Examples that Use Lists

Creating a ModelThere are three ways to create a list model

DefaultListModel mdash everything is pretty much taken care of for you The examples in this page use DefaultListModel

AbstractListModel mdash you manage the data and invoke the fire methods For this approach you must subclass AbstractListModel and implement the getSize and getElementAt methods inherited from the ListModel interface

ListModel mdash you manage everything

Initializing a ListHere is the code from ListDialogjava that creates and sets up its list

list = new JList(data) data has type Object[]listsetSelectionMode(ListSelectionModelSINGLE_INTERVAL_SELECTION)listsetLayoutOrientation(JListHORIZONTAL_WRAP)listsetVisibleRowCount(-1)

JScrollPane listScroller = new JScrollPane(list)listScrollersetPreferredSize(new Dimension(250 80))The code passes an array to the lists constructor The array is filled with strings that were passed in from another object In our example the strings happen to be boys names

Other JList constructors let you initialize a list from a Vector or from an object that adheres to the ListModel interface If you initialize a list with an array or vector the constructor implicitly creates a default list model The default list model is immutable mdash you cannot add remove or replace items in the list To create a list whose items can be changed individually set the lists model to an instance of a mutable list model class such as an instance of DefaultListModel You can set a lists model when you create the list or by calling the setModel method See Adding Items to and Removing Items from a List for an example

The call to setSelectionMode specifies how many items the user can select and whether they must be contiguous the next section tells you more about selection modes

The call to setLayoutOrientation lets the list display its data in multiple columns The value JListHORIZONTAL_WRAP specifies that the list should display its items from left to right before wrapping to a new row Another possible value is JListVERTICAL_WRAP which specifies that the data be displayed from top to bottom (as usual) before wrapping to a new column The following figures show these two wrapping possibilities together with the default JListVERTICAL

HORIZONTAL_WRAP VERTICAL_WRAP VERTICAL

In combination with the call to setLayoutOrientation invoking setVisibleRowCount(-1) makes the list display the maximum number of items possible in the available space onscreen Another common use of setVisibleRowCount is to specify to the listss scroll pane how many rows the list prefers to display

Selecting Items in a ListA list uses an instance of ListSelectionModel to manage its selection By default a list selection model allows any combination of items to be selected at a time You can specify a different selection mode by calling the setSelectionMode method on the list For example both ListDialog and ListDemo set the selection mode to SINGLE_SELECTION (a constant defined by ListSelectionModel) so that only one item in the list can be selected The following table describes the three list selection modes

Mode Description

SINGLE_SELECTION Only one item can be selected at a time When the user selects an item any previously selected item is deselected first

SINGLE_INTERVAL_SELECTION Multiple contiguous items can be selected When the user begins a new selection range any previously selected items are deselected first

MULTIPLE_INTERVAL_SELECTION The default Any combination of items can be selected The user must explicitly deselect items

No matter which selection mode your list uses the list fires list selection events whenever the selection changes You can process these events by adding a list selection listener to the list with the addListSelectionListener method A list selection listener must implement one method valueChanged Here is the valueChanged method for the listener in ListDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting() == false)

if (listgetSelectedIndex() == -1) No selection disable fire button fireButtonsetEnabled(false)

else Selection enable the fire button fireButtonsetEnabled(true) Many list selection events can be generated from a single user action such as a mouse click The getValueIsAdjusting method returns true if the user is still manipulating the selection This particular program is interested only in the final result of the users action so the valueChanged method does something only if getValueIsAdjusting returns false

Because the list is in single-selection mode this code can use getSelectedIndex to get the index of the just-selected item JList provides other methods for setting or getting the selection when the selection mode allows more than one item to be selected If you want you can listen for events on the lists list selection model rather than on the list itself ListSelectionDemo is an example that shows how to listen for list selection events on the list selection model and lets you change the selection mode of a list dynamically

Adding Items to and Removing Items from a ListThe ListDemo example that we showed previously features a list whose contents can change You can find the source code for ListDemo in ListDemojava Here is the ListDemo code that creates a mutable list model object puts the initial items in it and uses the list model to create a list

listModel = new DefaultListModel()listModeladdElement(Jane Doe)listModeladdElement(John Smith)listModeladdElement(Kathy Green)

list = new JList(listModel)This particular program uses an instance of DefaultListModel a class provided by Swing In spite of the class name a list does not have a DefaultListModel unless your program explicitly makes it so If DefaultListModel does not suit your needs you can write a custom list model which must adhere to the ListModel interface

The following code snippet shows the actionPerformed method for the action listener registered on the Fire button The bold line of code removes the selected item in the list The remaining lines in the method disable the fire button if the list is now empty and make another selection if it is not

public void actionPerformed(ActionEvent e) int index = listgetSelectedIndex() listModelremove(index)

int size = listModelgetSize()

if (size == 0) Nobodys left disable firing fireButtonsetEnabled(false)

else Select an index if (index == listModelgetSize()) removed item in last position index--

listsetSelectedIndex(index) listensureIndexIsVisible(index)

Here is the actionPerformed method for the action listener shared by the Hire button and the text field

public void actionPerformed(ActionEvent e) String name = employeeNamegetText()

User did not type in a unique name if (nameequals() || alreadyInList(name)) ToolkitgetDefaultToolkit()beep() employeeNamerequestFocusInWindow() employeeNameselectAll() return

int index = listgetSelectedIndex() get selected index if (index == -1) no selection so insert at beginning index = 0 else add after the selected item index++

listModelinsertElementAt(employeeNamegetText() index)

Reset the text field employeeNamerequestFocusInWindow() employeeNamesetText()

Select the new item and make it visible listsetSelectedIndex(index) listensureIndexIsVisible(index)This code uses the list models insertElementAt method to insert the new name after the current selection or if no selection exists at the beginning of the list If you just wish to add to the end of the list you can use DefaultListModels addElement method instead

Whenever items are added to removed from or modified in a list the list model fires list data events Refer to How to Write a List Data Listener for information about listening for these events That section contains an example that is similar to ListDemo but adds buttons that move items up or down in the list

Writing a Custom Cell RendererA list uses an object called a cell renderer to display each of its items The default cell renderer knows how to display strings and icons and it displays Objects by invoking toString If you want to change the way the default renderer display icons or strings or if you want behavior different than what is provided by toString you can implement a custom cell renderer Take these steps to provide a custom cell renderer for a list

Write a class that implements the ListCellRenderer interface Create an instance of your class and call the lists setCellRenderer using the instance as

an argument

We do not provide an example of a list with a custom cell renderer but we do have an example of a combo box with a custom renderer mdash and combo boxes use the same type of renderer as lists See the example described in Providing a Custom Renderer

The List API The following tables list the commonly used JList constructors and methods Other methods you are most likely to invoke on a JList object are those such as setPreferredSize that its superclasses provide See The JComponent API for tables of commonly used inherited methods

Much of the operation of a list is managed by other objects The items in the list are managed by a list model object the selection is managed by a list selection model object and most programs put a list in a scroll pane to handle scrolling For the most part you do not need to worry about the models because JList creates them as necessary and you interact with them implicitly with JLists convenience methods

That said the API for using lists falls into these categories

Initializing List Data Displaying the List Managing the Lists Selection Managing List Data

Initializing List Data

Method or Constructor

Purpose

JList(ListModel) JList(Object[]) JList(Vector) JList()

Create a list with the initial list items specified The second and third constructors implicitly create an immutable ListModel you should not subsequently modify the passed-in array or Vector

void setModel(ListModel) ListModel getModel()

Set or get the model that contains the contents of the list

void setListData(Object[]) void setListData(Vector)

Set the items in the list These methods implicitly create an immutable ListModel

Displaying the List

Method Purpose

void setVisibleRowCount(int) int getVisibleRowCount()

Set or get the visibleRowCount property For a VERTICAL layout orientation this sets or gets the preferred number of rows to display without requiring scrolling For the HORIZONTAL_WRAP or VERTICAL_WRAP layout orientations it defines how the cells wrap See the setLayoutOrientation(int) for more information The default value of this property is VERTICAL

void setLayoutOrientation(int) int getLayoutOrientation()

Set or get the way list cells are laid out The possible layout formats are specified by the JList-defined values VERTICAL (a single column of cells the default) HORIZONTAL_WRAP (newspaper style with the content flowing horizontally then vertically) and VERTICAL_WRAP (newspaper style with the content flowing vertically then horizontally)

int getFirstVisibleIndex() int getLastVisibleIndex()

Get the index of the first or last visible item

void ensureIndexIsVisible(int)

Scroll so that the specified index is visible within the viewport that this list is in

Managing the Lists Selection

Method Purpose

void addListSelectionListener(ListSelectionListener)

Register to receive notification of selection changes

void setSelectedIndex(int) void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectionInterval(int int)

Set the current selection as indicated Use setSelectionMode to set what ranges of selections are acceptable The boolean argument specifies whether the list should attempt to scroll itself so that the selected item is visible

int getAnchorSelectionIndex() int getLeadSelectionIndex() int getSelectedIndex() int getMinSelectionIndex() int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Get information about the current selection as indicated

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 3: Crear Un Modelo y Asignarlo a Una JList

bigDataListsetPrototypeCellValue(Index 1234567890)

JList uses a javaawtComponent provided by a delegate called the cellRendererer to paint the visible cells in the list The cell renderer component is used like a rubber stamp to paint each visible row Each time the JList needs to paint a cell it asks the cell renderer for the component moves it into place using setBounds() and then draws it by calling its paint method The default cell renderer uses a JLabel component to render the string value of each component You can substitute your own cell renderer using code like this

Display an icon and a string for each object in the list

class MyCellRenderer extends JLabel implements ListCellRenderer final static ImageIcon longIcon = new ImageIcon(longgif) final static ImageIcon shortIcon = new ImageIcon(shortgif)

This is the only method defined by ListCellRenderer We just reconfigure the JLabel each time were called

public Component getListCellRendererComponent( JList list Object value value to display int index cell index boolean isSelected is the cell selected boolean cellHasFocus) the list and the cell have the focus String s = valuetoString() setText(s) setIcon((slength() gt 10) longIcon shortIcon) if (isSelected) setBackground(listgetSelectionBackground())

setForeground(listgetSelectionForeground())

else setBackground(listgetBackground()) setForeground(listgetForeground()) setEnabled(listisEnabled()) setFont(listgetFont())

setOpaque(true) return this

String[] data = one two three four JList dataList = new JList(data) dataListsetCellRenderer(new MyCellRenderer())

JList doesnt provide any special support for handling double or triple (or N) mouse clicks however its easy to handle them using a MouseListener Use the JList method locationToIndex() to determine what cell was clicked For example

final JList list = new JList(dataModel) MouseListener mouseListener = new MouseAdapter() public void mouseClicked(MouseEvent e) if (egetClickCount() == 2) int index = listlocationToIndex(egetPoint()) Systemoutprintln(Double clicked on Item + index) listaddMouseListener(mouseListener)

Note that in this example the dataList is final because its referred to by the anonymous MouseListener class

For the keyboard keys used by this component in the standard look and feel (LampF) renditions see the JList key assignments

How to Use ListsA JList presents the user with a group of items displayed in one or more columns to choose from Lists can have many items so they are often put in scroll panes

In addition to lists the following Swing components present multiple selectable items to the user combo boxes menus tables and groups of check boxes or radio buttons To display hierarchical data use a tree

The following figures shows two applications that use lists This section uses these examples as a basis for the discussions that follow

ListDialog (used by ListDialogRunner)

ListDemo

Try this

1 Click the Launch button to run ListDemo using Javatrade Web Start (download JDK 6) Alternatively to compile and run the example yourself consult the example index

2 Click the Launch button to run ListDialogRunner Alternatively to compile and run the example yourself consult the example index

3 To bring up the ListDialog click the Pick a new name button in the window titled Name That Baby The resulting dialog is a ListDialog instance that has been customized to have the title Name Chooser

4 In ListDemo try adding (hiring) and removing (firing) a few items

This rest of this section discusses the following topics

Creating a Model Initializing a List Selecting Items in a List Adding Items to and Removing Items from a List Writing a Custom Cell Renderer The List API Examples that Use Lists

Creating a ModelThere are three ways to create a list model

DefaultListModel mdash everything is pretty much taken care of for you The examples in this page use DefaultListModel

AbstractListModel mdash you manage the data and invoke the fire methods For this approach you must subclass AbstractListModel and implement the getSize and getElementAt methods inherited from the ListModel interface

ListModel mdash you manage everything

Initializing a ListHere is the code from ListDialogjava that creates and sets up its list

list = new JList(data) data has type Object[]listsetSelectionMode(ListSelectionModelSINGLE_INTERVAL_SELECTION)listsetLayoutOrientation(JListHORIZONTAL_WRAP)listsetVisibleRowCount(-1)

JScrollPane listScroller = new JScrollPane(list)listScrollersetPreferredSize(new Dimension(250 80))The code passes an array to the lists constructor The array is filled with strings that were passed in from another object In our example the strings happen to be boys names

Other JList constructors let you initialize a list from a Vector or from an object that adheres to the ListModel interface If you initialize a list with an array or vector the constructor implicitly creates a default list model The default list model is immutable mdash you cannot add remove or replace items in the list To create a list whose items can be changed individually set the lists model to an instance of a mutable list model class such as an instance of DefaultListModel You can set a lists model when you create the list or by calling the setModel method See Adding Items to and Removing Items from a List for an example

The call to setSelectionMode specifies how many items the user can select and whether they must be contiguous the next section tells you more about selection modes

The call to setLayoutOrientation lets the list display its data in multiple columns The value JListHORIZONTAL_WRAP specifies that the list should display its items from left to right before wrapping to a new row Another possible value is JListVERTICAL_WRAP which specifies that the data be displayed from top to bottom (as usual) before wrapping to a new column The following figures show these two wrapping possibilities together with the default JListVERTICAL

HORIZONTAL_WRAP VERTICAL_WRAP VERTICAL

In combination with the call to setLayoutOrientation invoking setVisibleRowCount(-1) makes the list display the maximum number of items possible in the available space onscreen Another common use of setVisibleRowCount is to specify to the listss scroll pane how many rows the list prefers to display

Selecting Items in a ListA list uses an instance of ListSelectionModel to manage its selection By default a list selection model allows any combination of items to be selected at a time You can specify a different selection mode by calling the setSelectionMode method on the list For example both ListDialog and ListDemo set the selection mode to SINGLE_SELECTION (a constant defined by ListSelectionModel) so that only one item in the list can be selected The following table describes the three list selection modes

Mode Description

SINGLE_SELECTION Only one item can be selected at a time When the user selects an item any previously selected item is deselected first

SINGLE_INTERVAL_SELECTION Multiple contiguous items can be selected When the user begins a new selection range any previously selected items are deselected first

MULTIPLE_INTERVAL_SELECTION The default Any combination of items can be selected The user must explicitly deselect items

No matter which selection mode your list uses the list fires list selection events whenever the selection changes You can process these events by adding a list selection listener to the list with the addListSelectionListener method A list selection listener must implement one method valueChanged Here is the valueChanged method for the listener in ListDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting() == false)

if (listgetSelectedIndex() == -1) No selection disable fire button fireButtonsetEnabled(false)

else Selection enable the fire button fireButtonsetEnabled(true) Many list selection events can be generated from a single user action such as a mouse click The getValueIsAdjusting method returns true if the user is still manipulating the selection This particular program is interested only in the final result of the users action so the valueChanged method does something only if getValueIsAdjusting returns false

Because the list is in single-selection mode this code can use getSelectedIndex to get the index of the just-selected item JList provides other methods for setting or getting the selection when the selection mode allows more than one item to be selected If you want you can listen for events on the lists list selection model rather than on the list itself ListSelectionDemo is an example that shows how to listen for list selection events on the list selection model and lets you change the selection mode of a list dynamically

Adding Items to and Removing Items from a ListThe ListDemo example that we showed previously features a list whose contents can change You can find the source code for ListDemo in ListDemojava Here is the ListDemo code that creates a mutable list model object puts the initial items in it and uses the list model to create a list

listModel = new DefaultListModel()listModeladdElement(Jane Doe)listModeladdElement(John Smith)listModeladdElement(Kathy Green)

list = new JList(listModel)This particular program uses an instance of DefaultListModel a class provided by Swing In spite of the class name a list does not have a DefaultListModel unless your program explicitly makes it so If DefaultListModel does not suit your needs you can write a custom list model which must adhere to the ListModel interface

The following code snippet shows the actionPerformed method for the action listener registered on the Fire button The bold line of code removes the selected item in the list The remaining lines in the method disable the fire button if the list is now empty and make another selection if it is not

public void actionPerformed(ActionEvent e) int index = listgetSelectedIndex() listModelremove(index)

int size = listModelgetSize()

if (size == 0) Nobodys left disable firing fireButtonsetEnabled(false)

else Select an index if (index == listModelgetSize()) removed item in last position index--

listsetSelectedIndex(index) listensureIndexIsVisible(index)

Here is the actionPerformed method for the action listener shared by the Hire button and the text field

public void actionPerformed(ActionEvent e) String name = employeeNamegetText()

User did not type in a unique name if (nameequals() || alreadyInList(name)) ToolkitgetDefaultToolkit()beep() employeeNamerequestFocusInWindow() employeeNameselectAll() return

int index = listgetSelectedIndex() get selected index if (index == -1) no selection so insert at beginning index = 0 else add after the selected item index++

listModelinsertElementAt(employeeNamegetText() index)

Reset the text field employeeNamerequestFocusInWindow() employeeNamesetText()

Select the new item and make it visible listsetSelectedIndex(index) listensureIndexIsVisible(index)This code uses the list models insertElementAt method to insert the new name after the current selection or if no selection exists at the beginning of the list If you just wish to add to the end of the list you can use DefaultListModels addElement method instead

Whenever items are added to removed from or modified in a list the list model fires list data events Refer to How to Write a List Data Listener for information about listening for these events That section contains an example that is similar to ListDemo but adds buttons that move items up or down in the list

Writing a Custom Cell RendererA list uses an object called a cell renderer to display each of its items The default cell renderer knows how to display strings and icons and it displays Objects by invoking toString If you want to change the way the default renderer display icons or strings or if you want behavior different than what is provided by toString you can implement a custom cell renderer Take these steps to provide a custom cell renderer for a list

Write a class that implements the ListCellRenderer interface Create an instance of your class and call the lists setCellRenderer using the instance as

an argument

We do not provide an example of a list with a custom cell renderer but we do have an example of a combo box with a custom renderer mdash and combo boxes use the same type of renderer as lists See the example described in Providing a Custom Renderer

The List API The following tables list the commonly used JList constructors and methods Other methods you are most likely to invoke on a JList object are those such as setPreferredSize that its superclasses provide See The JComponent API for tables of commonly used inherited methods

Much of the operation of a list is managed by other objects The items in the list are managed by a list model object the selection is managed by a list selection model object and most programs put a list in a scroll pane to handle scrolling For the most part you do not need to worry about the models because JList creates them as necessary and you interact with them implicitly with JLists convenience methods

That said the API for using lists falls into these categories

Initializing List Data Displaying the List Managing the Lists Selection Managing List Data

Initializing List Data

Method or Constructor

Purpose

JList(ListModel) JList(Object[]) JList(Vector) JList()

Create a list with the initial list items specified The second and third constructors implicitly create an immutable ListModel you should not subsequently modify the passed-in array or Vector

void setModel(ListModel) ListModel getModel()

Set or get the model that contains the contents of the list

void setListData(Object[]) void setListData(Vector)

Set the items in the list These methods implicitly create an immutable ListModel

Displaying the List

Method Purpose

void setVisibleRowCount(int) int getVisibleRowCount()

Set or get the visibleRowCount property For a VERTICAL layout orientation this sets or gets the preferred number of rows to display without requiring scrolling For the HORIZONTAL_WRAP or VERTICAL_WRAP layout orientations it defines how the cells wrap See the setLayoutOrientation(int) for more information The default value of this property is VERTICAL

void setLayoutOrientation(int) int getLayoutOrientation()

Set or get the way list cells are laid out The possible layout formats are specified by the JList-defined values VERTICAL (a single column of cells the default) HORIZONTAL_WRAP (newspaper style with the content flowing horizontally then vertically) and VERTICAL_WRAP (newspaper style with the content flowing vertically then horizontally)

int getFirstVisibleIndex() int getLastVisibleIndex()

Get the index of the first or last visible item

void ensureIndexIsVisible(int)

Scroll so that the specified index is visible within the viewport that this list is in

Managing the Lists Selection

Method Purpose

void addListSelectionListener(ListSelectionListener)

Register to receive notification of selection changes

void setSelectedIndex(int) void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectionInterval(int int)

Set the current selection as indicated Use setSelectionMode to set what ranges of selections are acceptable The boolean argument specifies whether the list should attempt to scroll itself so that the selected item is visible

int getAnchorSelectionIndex() int getLeadSelectionIndex() int getSelectedIndex() int getMinSelectionIndex() int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Get information about the current selection as indicated

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 4: Crear Un Modelo y Asignarlo a Una JList

final JList list = new JList(dataModel) MouseListener mouseListener = new MouseAdapter() public void mouseClicked(MouseEvent e) if (egetClickCount() == 2) int index = listlocationToIndex(egetPoint()) Systemoutprintln(Double clicked on Item + index) listaddMouseListener(mouseListener)

Note that in this example the dataList is final because its referred to by the anonymous MouseListener class

For the keyboard keys used by this component in the standard look and feel (LampF) renditions see the JList key assignments

How to Use ListsA JList presents the user with a group of items displayed in one or more columns to choose from Lists can have many items so they are often put in scroll panes

In addition to lists the following Swing components present multiple selectable items to the user combo boxes menus tables and groups of check boxes or radio buttons To display hierarchical data use a tree

The following figures shows two applications that use lists This section uses these examples as a basis for the discussions that follow

ListDialog (used by ListDialogRunner)

ListDemo

Try this

1 Click the Launch button to run ListDemo using Javatrade Web Start (download JDK 6) Alternatively to compile and run the example yourself consult the example index

2 Click the Launch button to run ListDialogRunner Alternatively to compile and run the example yourself consult the example index

3 To bring up the ListDialog click the Pick a new name button in the window titled Name That Baby The resulting dialog is a ListDialog instance that has been customized to have the title Name Chooser

4 In ListDemo try adding (hiring) and removing (firing) a few items

This rest of this section discusses the following topics

Creating a Model Initializing a List Selecting Items in a List Adding Items to and Removing Items from a List Writing a Custom Cell Renderer The List API Examples that Use Lists

Creating a ModelThere are three ways to create a list model

DefaultListModel mdash everything is pretty much taken care of for you The examples in this page use DefaultListModel

AbstractListModel mdash you manage the data and invoke the fire methods For this approach you must subclass AbstractListModel and implement the getSize and getElementAt methods inherited from the ListModel interface

ListModel mdash you manage everything

Initializing a ListHere is the code from ListDialogjava that creates and sets up its list

list = new JList(data) data has type Object[]listsetSelectionMode(ListSelectionModelSINGLE_INTERVAL_SELECTION)listsetLayoutOrientation(JListHORIZONTAL_WRAP)listsetVisibleRowCount(-1)

JScrollPane listScroller = new JScrollPane(list)listScrollersetPreferredSize(new Dimension(250 80))The code passes an array to the lists constructor The array is filled with strings that were passed in from another object In our example the strings happen to be boys names

Other JList constructors let you initialize a list from a Vector or from an object that adheres to the ListModel interface If you initialize a list with an array or vector the constructor implicitly creates a default list model The default list model is immutable mdash you cannot add remove or replace items in the list To create a list whose items can be changed individually set the lists model to an instance of a mutable list model class such as an instance of DefaultListModel You can set a lists model when you create the list or by calling the setModel method See Adding Items to and Removing Items from a List for an example

The call to setSelectionMode specifies how many items the user can select and whether they must be contiguous the next section tells you more about selection modes

The call to setLayoutOrientation lets the list display its data in multiple columns The value JListHORIZONTAL_WRAP specifies that the list should display its items from left to right before wrapping to a new row Another possible value is JListVERTICAL_WRAP which specifies that the data be displayed from top to bottom (as usual) before wrapping to a new column The following figures show these two wrapping possibilities together with the default JListVERTICAL

HORIZONTAL_WRAP VERTICAL_WRAP VERTICAL

In combination with the call to setLayoutOrientation invoking setVisibleRowCount(-1) makes the list display the maximum number of items possible in the available space onscreen Another common use of setVisibleRowCount is to specify to the listss scroll pane how many rows the list prefers to display

Selecting Items in a ListA list uses an instance of ListSelectionModel to manage its selection By default a list selection model allows any combination of items to be selected at a time You can specify a different selection mode by calling the setSelectionMode method on the list For example both ListDialog and ListDemo set the selection mode to SINGLE_SELECTION (a constant defined by ListSelectionModel) so that only one item in the list can be selected The following table describes the three list selection modes

Mode Description

SINGLE_SELECTION Only one item can be selected at a time When the user selects an item any previously selected item is deselected first

SINGLE_INTERVAL_SELECTION Multiple contiguous items can be selected When the user begins a new selection range any previously selected items are deselected first

MULTIPLE_INTERVAL_SELECTION The default Any combination of items can be selected The user must explicitly deselect items

No matter which selection mode your list uses the list fires list selection events whenever the selection changes You can process these events by adding a list selection listener to the list with the addListSelectionListener method A list selection listener must implement one method valueChanged Here is the valueChanged method for the listener in ListDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting() == false)

if (listgetSelectedIndex() == -1) No selection disable fire button fireButtonsetEnabled(false)

else Selection enable the fire button fireButtonsetEnabled(true) Many list selection events can be generated from a single user action such as a mouse click The getValueIsAdjusting method returns true if the user is still manipulating the selection This particular program is interested only in the final result of the users action so the valueChanged method does something only if getValueIsAdjusting returns false

Because the list is in single-selection mode this code can use getSelectedIndex to get the index of the just-selected item JList provides other methods for setting or getting the selection when the selection mode allows more than one item to be selected If you want you can listen for events on the lists list selection model rather than on the list itself ListSelectionDemo is an example that shows how to listen for list selection events on the list selection model and lets you change the selection mode of a list dynamically

Adding Items to and Removing Items from a ListThe ListDemo example that we showed previously features a list whose contents can change You can find the source code for ListDemo in ListDemojava Here is the ListDemo code that creates a mutable list model object puts the initial items in it and uses the list model to create a list

listModel = new DefaultListModel()listModeladdElement(Jane Doe)listModeladdElement(John Smith)listModeladdElement(Kathy Green)

list = new JList(listModel)This particular program uses an instance of DefaultListModel a class provided by Swing In spite of the class name a list does not have a DefaultListModel unless your program explicitly makes it so If DefaultListModel does not suit your needs you can write a custom list model which must adhere to the ListModel interface

The following code snippet shows the actionPerformed method for the action listener registered on the Fire button The bold line of code removes the selected item in the list The remaining lines in the method disable the fire button if the list is now empty and make another selection if it is not

public void actionPerformed(ActionEvent e) int index = listgetSelectedIndex() listModelremove(index)

int size = listModelgetSize()

if (size == 0) Nobodys left disable firing fireButtonsetEnabled(false)

else Select an index if (index == listModelgetSize()) removed item in last position index--

listsetSelectedIndex(index) listensureIndexIsVisible(index)

Here is the actionPerformed method for the action listener shared by the Hire button and the text field

public void actionPerformed(ActionEvent e) String name = employeeNamegetText()

User did not type in a unique name if (nameequals() || alreadyInList(name)) ToolkitgetDefaultToolkit()beep() employeeNamerequestFocusInWindow() employeeNameselectAll() return

int index = listgetSelectedIndex() get selected index if (index == -1) no selection so insert at beginning index = 0 else add after the selected item index++

listModelinsertElementAt(employeeNamegetText() index)

Reset the text field employeeNamerequestFocusInWindow() employeeNamesetText()

Select the new item and make it visible listsetSelectedIndex(index) listensureIndexIsVisible(index)This code uses the list models insertElementAt method to insert the new name after the current selection or if no selection exists at the beginning of the list If you just wish to add to the end of the list you can use DefaultListModels addElement method instead

Whenever items are added to removed from or modified in a list the list model fires list data events Refer to How to Write a List Data Listener for information about listening for these events That section contains an example that is similar to ListDemo but adds buttons that move items up or down in the list

Writing a Custom Cell RendererA list uses an object called a cell renderer to display each of its items The default cell renderer knows how to display strings and icons and it displays Objects by invoking toString If you want to change the way the default renderer display icons or strings or if you want behavior different than what is provided by toString you can implement a custom cell renderer Take these steps to provide a custom cell renderer for a list

Write a class that implements the ListCellRenderer interface Create an instance of your class and call the lists setCellRenderer using the instance as

an argument

We do not provide an example of a list with a custom cell renderer but we do have an example of a combo box with a custom renderer mdash and combo boxes use the same type of renderer as lists See the example described in Providing a Custom Renderer

The List API The following tables list the commonly used JList constructors and methods Other methods you are most likely to invoke on a JList object are those such as setPreferredSize that its superclasses provide See The JComponent API for tables of commonly used inherited methods

Much of the operation of a list is managed by other objects The items in the list are managed by a list model object the selection is managed by a list selection model object and most programs put a list in a scroll pane to handle scrolling For the most part you do not need to worry about the models because JList creates them as necessary and you interact with them implicitly with JLists convenience methods

That said the API for using lists falls into these categories

Initializing List Data Displaying the List Managing the Lists Selection Managing List Data

Initializing List Data

Method or Constructor

Purpose

JList(ListModel) JList(Object[]) JList(Vector) JList()

Create a list with the initial list items specified The second and third constructors implicitly create an immutable ListModel you should not subsequently modify the passed-in array or Vector

void setModel(ListModel) ListModel getModel()

Set or get the model that contains the contents of the list

void setListData(Object[]) void setListData(Vector)

Set the items in the list These methods implicitly create an immutable ListModel

Displaying the List

Method Purpose

void setVisibleRowCount(int) int getVisibleRowCount()

Set or get the visibleRowCount property For a VERTICAL layout orientation this sets or gets the preferred number of rows to display without requiring scrolling For the HORIZONTAL_WRAP or VERTICAL_WRAP layout orientations it defines how the cells wrap See the setLayoutOrientation(int) for more information The default value of this property is VERTICAL

void setLayoutOrientation(int) int getLayoutOrientation()

Set or get the way list cells are laid out The possible layout formats are specified by the JList-defined values VERTICAL (a single column of cells the default) HORIZONTAL_WRAP (newspaper style with the content flowing horizontally then vertically) and VERTICAL_WRAP (newspaper style with the content flowing vertically then horizontally)

int getFirstVisibleIndex() int getLastVisibleIndex()

Get the index of the first or last visible item

void ensureIndexIsVisible(int)

Scroll so that the specified index is visible within the viewport that this list is in

Managing the Lists Selection

Method Purpose

void addListSelectionListener(ListSelectionListener)

Register to receive notification of selection changes

void setSelectedIndex(int) void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectionInterval(int int)

Set the current selection as indicated Use setSelectionMode to set what ranges of selections are acceptable The boolean argument specifies whether the list should attempt to scroll itself so that the selected item is visible

int getAnchorSelectionIndex() int getLeadSelectionIndex() int getSelectedIndex() int getMinSelectionIndex() int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Get information about the current selection as indicated

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 5: Crear Un Modelo y Asignarlo a Una JList

Try this

1 Click the Launch button to run ListDemo using Javatrade Web Start (download JDK 6) Alternatively to compile and run the example yourself consult the example index

2 Click the Launch button to run ListDialogRunner Alternatively to compile and run the example yourself consult the example index

3 To bring up the ListDialog click the Pick a new name button in the window titled Name That Baby The resulting dialog is a ListDialog instance that has been customized to have the title Name Chooser

4 In ListDemo try adding (hiring) and removing (firing) a few items

This rest of this section discusses the following topics

Creating a Model Initializing a List Selecting Items in a List Adding Items to and Removing Items from a List Writing a Custom Cell Renderer The List API Examples that Use Lists

Creating a ModelThere are three ways to create a list model

DefaultListModel mdash everything is pretty much taken care of for you The examples in this page use DefaultListModel

AbstractListModel mdash you manage the data and invoke the fire methods For this approach you must subclass AbstractListModel and implement the getSize and getElementAt methods inherited from the ListModel interface

ListModel mdash you manage everything

Initializing a ListHere is the code from ListDialogjava that creates and sets up its list

list = new JList(data) data has type Object[]listsetSelectionMode(ListSelectionModelSINGLE_INTERVAL_SELECTION)listsetLayoutOrientation(JListHORIZONTAL_WRAP)listsetVisibleRowCount(-1)

JScrollPane listScroller = new JScrollPane(list)listScrollersetPreferredSize(new Dimension(250 80))The code passes an array to the lists constructor The array is filled with strings that were passed in from another object In our example the strings happen to be boys names

Other JList constructors let you initialize a list from a Vector or from an object that adheres to the ListModel interface If you initialize a list with an array or vector the constructor implicitly creates a default list model The default list model is immutable mdash you cannot add remove or replace items in the list To create a list whose items can be changed individually set the lists model to an instance of a mutable list model class such as an instance of DefaultListModel You can set a lists model when you create the list or by calling the setModel method See Adding Items to and Removing Items from a List for an example

The call to setSelectionMode specifies how many items the user can select and whether they must be contiguous the next section tells you more about selection modes

The call to setLayoutOrientation lets the list display its data in multiple columns The value JListHORIZONTAL_WRAP specifies that the list should display its items from left to right before wrapping to a new row Another possible value is JListVERTICAL_WRAP which specifies that the data be displayed from top to bottom (as usual) before wrapping to a new column The following figures show these two wrapping possibilities together with the default JListVERTICAL

HORIZONTAL_WRAP VERTICAL_WRAP VERTICAL

In combination with the call to setLayoutOrientation invoking setVisibleRowCount(-1) makes the list display the maximum number of items possible in the available space onscreen Another common use of setVisibleRowCount is to specify to the listss scroll pane how many rows the list prefers to display

Selecting Items in a ListA list uses an instance of ListSelectionModel to manage its selection By default a list selection model allows any combination of items to be selected at a time You can specify a different selection mode by calling the setSelectionMode method on the list For example both ListDialog and ListDemo set the selection mode to SINGLE_SELECTION (a constant defined by ListSelectionModel) so that only one item in the list can be selected The following table describes the three list selection modes

Mode Description

SINGLE_SELECTION Only one item can be selected at a time When the user selects an item any previously selected item is deselected first

SINGLE_INTERVAL_SELECTION Multiple contiguous items can be selected When the user begins a new selection range any previously selected items are deselected first

MULTIPLE_INTERVAL_SELECTION The default Any combination of items can be selected The user must explicitly deselect items

No matter which selection mode your list uses the list fires list selection events whenever the selection changes You can process these events by adding a list selection listener to the list with the addListSelectionListener method A list selection listener must implement one method valueChanged Here is the valueChanged method for the listener in ListDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting() == false)

if (listgetSelectedIndex() == -1) No selection disable fire button fireButtonsetEnabled(false)

else Selection enable the fire button fireButtonsetEnabled(true) Many list selection events can be generated from a single user action such as a mouse click The getValueIsAdjusting method returns true if the user is still manipulating the selection This particular program is interested only in the final result of the users action so the valueChanged method does something only if getValueIsAdjusting returns false

Because the list is in single-selection mode this code can use getSelectedIndex to get the index of the just-selected item JList provides other methods for setting or getting the selection when the selection mode allows more than one item to be selected If you want you can listen for events on the lists list selection model rather than on the list itself ListSelectionDemo is an example that shows how to listen for list selection events on the list selection model and lets you change the selection mode of a list dynamically

Adding Items to and Removing Items from a ListThe ListDemo example that we showed previously features a list whose contents can change You can find the source code for ListDemo in ListDemojava Here is the ListDemo code that creates a mutable list model object puts the initial items in it and uses the list model to create a list

listModel = new DefaultListModel()listModeladdElement(Jane Doe)listModeladdElement(John Smith)listModeladdElement(Kathy Green)

list = new JList(listModel)This particular program uses an instance of DefaultListModel a class provided by Swing In spite of the class name a list does not have a DefaultListModel unless your program explicitly makes it so If DefaultListModel does not suit your needs you can write a custom list model which must adhere to the ListModel interface

The following code snippet shows the actionPerformed method for the action listener registered on the Fire button The bold line of code removes the selected item in the list The remaining lines in the method disable the fire button if the list is now empty and make another selection if it is not

public void actionPerformed(ActionEvent e) int index = listgetSelectedIndex() listModelremove(index)

int size = listModelgetSize()

if (size == 0) Nobodys left disable firing fireButtonsetEnabled(false)

else Select an index if (index == listModelgetSize()) removed item in last position index--

listsetSelectedIndex(index) listensureIndexIsVisible(index)

Here is the actionPerformed method for the action listener shared by the Hire button and the text field

public void actionPerformed(ActionEvent e) String name = employeeNamegetText()

User did not type in a unique name if (nameequals() || alreadyInList(name)) ToolkitgetDefaultToolkit()beep() employeeNamerequestFocusInWindow() employeeNameselectAll() return

int index = listgetSelectedIndex() get selected index if (index == -1) no selection so insert at beginning index = 0 else add after the selected item index++

listModelinsertElementAt(employeeNamegetText() index)

Reset the text field employeeNamerequestFocusInWindow() employeeNamesetText()

Select the new item and make it visible listsetSelectedIndex(index) listensureIndexIsVisible(index)This code uses the list models insertElementAt method to insert the new name after the current selection or if no selection exists at the beginning of the list If you just wish to add to the end of the list you can use DefaultListModels addElement method instead

Whenever items are added to removed from or modified in a list the list model fires list data events Refer to How to Write a List Data Listener for information about listening for these events That section contains an example that is similar to ListDemo but adds buttons that move items up or down in the list

Writing a Custom Cell RendererA list uses an object called a cell renderer to display each of its items The default cell renderer knows how to display strings and icons and it displays Objects by invoking toString If you want to change the way the default renderer display icons or strings or if you want behavior different than what is provided by toString you can implement a custom cell renderer Take these steps to provide a custom cell renderer for a list

Write a class that implements the ListCellRenderer interface Create an instance of your class and call the lists setCellRenderer using the instance as

an argument

We do not provide an example of a list with a custom cell renderer but we do have an example of a combo box with a custom renderer mdash and combo boxes use the same type of renderer as lists See the example described in Providing a Custom Renderer

The List API The following tables list the commonly used JList constructors and methods Other methods you are most likely to invoke on a JList object are those such as setPreferredSize that its superclasses provide See The JComponent API for tables of commonly used inherited methods

Much of the operation of a list is managed by other objects The items in the list are managed by a list model object the selection is managed by a list selection model object and most programs put a list in a scroll pane to handle scrolling For the most part you do not need to worry about the models because JList creates them as necessary and you interact with them implicitly with JLists convenience methods

That said the API for using lists falls into these categories

Initializing List Data Displaying the List Managing the Lists Selection Managing List Data

Initializing List Data

Method or Constructor

Purpose

JList(ListModel) JList(Object[]) JList(Vector) JList()

Create a list with the initial list items specified The second and third constructors implicitly create an immutable ListModel you should not subsequently modify the passed-in array or Vector

void setModel(ListModel) ListModel getModel()

Set or get the model that contains the contents of the list

void setListData(Object[]) void setListData(Vector)

Set the items in the list These methods implicitly create an immutable ListModel

Displaying the List

Method Purpose

void setVisibleRowCount(int) int getVisibleRowCount()

Set or get the visibleRowCount property For a VERTICAL layout orientation this sets or gets the preferred number of rows to display without requiring scrolling For the HORIZONTAL_WRAP or VERTICAL_WRAP layout orientations it defines how the cells wrap See the setLayoutOrientation(int) for more information The default value of this property is VERTICAL

void setLayoutOrientation(int) int getLayoutOrientation()

Set or get the way list cells are laid out The possible layout formats are specified by the JList-defined values VERTICAL (a single column of cells the default) HORIZONTAL_WRAP (newspaper style with the content flowing horizontally then vertically) and VERTICAL_WRAP (newspaper style with the content flowing vertically then horizontally)

int getFirstVisibleIndex() int getLastVisibleIndex()

Get the index of the first or last visible item

void ensureIndexIsVisible(int)

Scroll so that the specified index is visible within the viewport that this list is in

Managing the Lists Selection

Method Purpose

void addListSelectionListener(ListSelectionListener)

Register to receive notification of selection changes

void setSelectedIndex(int) void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectionInterval(int int)

Set the current selection as indicated Use setSelectionMode to set what ranges of selections are acceptable The boolean argument specifies whether the list should attempt to scroll itself so that the selected item is visible

int getAnchorSelectionIndex() int getLeadSelectionIndex() int getSelectedIndex() int getMinSelectionIndex() int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Get information about the current selection as indicated

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 6: Crear Un Modelo y Asignarlo a Una JList

JScrollPane listScroller = new JScrollPane(list)listScrollersetPreferredSize(new Dimension(250 80))The code passes an array to the lists constructor The array is filled with strings that were passed in from another object In our example the strings happen to be boys names

Other JList constructors let you initialize a list from a Vector or from an object that adheres to the ListModel interface If you initialize a list with an array or vector the constructor implicitly creates a default list model The default list model is immutable mdash you cannot add remove or replace items in the list To create a list whose items can be changed individually set the lists model to an instance of a mutable list model class such as an instance of DefaultListModel You can set a lists model when you create the list or by calling the setModel method See Adding Items to and Removing Items from a List for an example

The call to setSelectionMode specifies how many items the user can select and whether they must be contiguous the next section tells you more about selection modes

The call to setLayoutOrientation lets the list display its data in multiple columns The value JListHORIZONTAL_WRAP specifies that the list should display its items from left to right before wrapping to a new row Another possible value is JListVERTICAL_WRAP which specifies that the data be displayed from top to bottom (as usual) before wrapping to a new column The following figures show these two wrapping possibilities together with the default JListVERTICAL

HORIZONTAL_WRAP VERTICAL_WRAP VERTICAL

In combination with the call to setLayoutOrientation invoking setVisibleRowCount(-1) makes the list display the maximum number of items possible in the available space onscreen Another common use of setVisibleRowCount is to specify to the listss scroll pane how many rows the list prefers to display

Selecting Items in a ListA list uses an instance of ListSelectionModel to manage its selection By default a list selection model allows any combination of items to be selected at a time You can specify a different selection mode by calling the setSelectionMode method on the list For example both ListDialog and ListDemo set the selection mode to SINGLE_SELECTION (a constant defined by ListSelectionModel) so that only one item in the list can be selected The following table describes the three list selection modes

Mode Description

SINGLE_SELECTION Only one item can be selected at a time When the user selects an item any previously selected item is deselected first

SINGLE_INTERVAL_SELECTION Multiple contiguous items can be selected When the user begins a new selection range any previously selected items are deselected first

MULTIPLE_INTERVAL_SELECTION The default Any combination of items can be selected The user must explicitly deselect items

No matter which selection mode your list uses the list fires list selection events whenever the selection changes You can process these events by adding a list selection listener to the list with the addListSelectionListener method A list selection listener must implement one method valueChanged Here is the valueChanged method for the listener in ListDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting() == false)

if (listgetSelectedIndex() == -1) No selection disable fire button fireButtonsetEnabled(false)

else Selection enable the fire button fireButtonsetEnabled(true) Many list selection events can be generated from a single user action such as a mouse click The getValueIsAdjusting method returns true if the user is still manipulating the selection This particular program is interested only in the final result of the users action so the valueChanged method does something only if getValueIsAdjusting returns false

Because the list is in single-selection mode this code can use getSelectedIndex to get the index of the just-selected item JList provides other methods for setting or getting the selection when the selection mode allows more than one item to be selected If you want you can listen for events on the lists list selection model rather than on the list itself ListSelectionDemo is an example that shows how to listen for list selection events on the list selection model and lets you change the selection mode of a list dynamically

Adding Items to and Removing Items from a ListThe ListDemo example that we showed previously features a list whose contents can change You can find the source code for ListDemo in ListDemojava Here is the ListDemo code that creates a mutable list model object puts the initial items in it and uses the list model to create a list

listModel = new DefaultListModel()listModeladdElement(Jane Doe)listModeladdElement(John Smith)listModeladdElement(Kathy Green)

list = new JList(listModel)This particular program uses an instance of DefaultListModel a class provided by Swing In spite of the class name a list does not have a DefaultListModel unless your program explicitly makes it so If DefaultListModel does not suit your needs you can write a custom list model which must adhere to the ListModel interface

The following code snippet shows the actionPerformed method for the action listener registered on the Fire button The bold line of code removes the selected item in the list The remaining lines in the method disable the fire button if the list is now empty and make another selection if it is not

public void actionPerformed(ActionEvent e) int index = listgetSelectedIndex() listModelremove(index)

int size = listModelgetSize()

if (size == 0) Nobodys left disable firing fireButtonsetEnabled(false)

else Select an index if (index == listModelgetSize()) removed item in last position index--

listsetSelectedIndex(index) listensureIndexIsVisible(index)

Here is the actionPerformed method for the action listener shared by the Hire button and the text field

public void actionPerformed(ActionEvent e) String name = employeeNamegetText()

User did not type in a unique name if (nameequals() || alreadyInList(name)) ToolkitgetDefaultToolkit()beep() employeeNamerequestFocusInWindow() employeeNameselectAll() return

int index = listgetSelectedIndex() get selected index if (index == -1) no selection so insert at beginning index = 0 else add after the selected item index++

listModelinsertElementAt(employeeNamegetText() index)

Reset the text field employeeNamerequestFocusInWindow() employeeNamesetText()

Select the new item and make it visible listsetSelectedIndex(index) listensureIndexIsVisible(index)This code uses the list models insertElementAt method to insert the new name after the current selection or if no selection exists at the beginning of the list If you just wish to add to the end of the list you can use DefaultListModels addElement method instead

Whenever items are added to removed from or modified in a list the list model fires list data events Refer to How to Write a List Data Listener for information about listening for these events That section contains an example that is similar to ListDemo but adds buttons that move items up or down in the list

Writing a Custom Cell RendererA list uses an object called a cell renderer to display each of its items The default cell renderer knows how to display strings and icons and it displays Objects by invoking toString If you want to change the way the default renderer display icons or strings or if you want behavior different than what is provided by toString you can implement a custom cell renderer Take these steps to provide a custom cell renderer for a list

Write a class that implements the ListCellRenderer interface Create an instance of your class and call the lists setCellRenderer using the instance as

an argument

We do not provide an example of a list with a custom cell renderer but we do have an example of a combo box with a custom renderer mdash and combo boxes use the same type of renderer as lists See the example described in Providing a Custom Renderer

The List API The following tables list the commonly used JList constructors and methods Other methods you are most likely to invoke on a JList object are those such as setPreferredSize that its superclasses provide See The JComponent API for tables of commonly used inherited methods

Much of the operation of a list is managed by other objects The items in the list are managed by a list model object the selection is managed by a list selection model object and most programs put a list in a scroll pane to handle scrolling For the most part you do not need to worry about the models because JList creates them as necessary and you interact with them implicitly with JLists convenience methods

That said the API for using lists falls into these categories

Initializing List Data Displaying the List Managing the Lists Selection Managing List Data

Initializing List Data

Method or Constructor

Purpose

JList(ListModel) JList(Object[]) JList(Vector) JList()

Create a list with the initial list items specified The second and third constructors implicitly create an immutable ListModel you should not subsequently modify the passed-in array or Vector

void setModel(ListModel) ListModel getModel()

Set or get the model that contains the contents of the list

void setListData(Object[]) void setListData(Vector)

Set the items in the list These methods implicitly create an immutable ListModel

Displaying the List

Method Purpose

void setVisibleRowCount(int) int getVisibleRowCount()

Set or get the visibleRowCount property For a VERTICAL layout orientation this sets or gets the preferred number of rows to display without requiring scrolling For the HORIZONTAL_WRAP or VERTICAL_WRAP layout orientations it defines how the cells wrap See the setLayoutOrientation(int) for more information The default value of this property is VERTICAL

void setLayoutOrientation(int) int getLayoutOrientation()

Set or get the way list cells are laid out The possible layout formats are specified by the JList-defined values VERTICAL (a single column of cells the default) HORIZONTAL_WRAP (newspaper style with the content flowing horizontally then vertically) and VERTICAL_WRAP (newspaper style with the content flowing vertically then horizontally)

int getFirstVisibleIndex() int getLastVisibleIndex()

Get the index of the first or last visible item

void ensureIndexIsVisible(int)

Scroll so that the specified index is visible within the viewport that this list is in

Managing the Lists Selection

Method Purpose

void addListSelectionListener(ListSelectionListener)

Register to receive notification of selection changes

void setSelectedIndex(int) void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectionInterval(int int)

Set the current selection as indicated Use setSelectionMode to set what ranges of selections are acceptable The boolean argument specifies whether the list should attempt to scroll itself so that the selected item is visible

int getAnchorSelectionIndex() int getLeadSelectionIndex() int getSelectedIndex() int getMinSelectionIndex() int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Get information about the current selection as indicated

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 7: Crear Un Modelo y Asignarlo a Una JList

Mode Description

SINGLE_SELECTION Only one item can be selected at a time When the user selects an item any previously selected item is deselected first

SINGLE_INTERVAL_SELECTION Multiple contiguous items can be selected When the user begins a new selection range any previously selected items are deselected first

MULTIPLE_INTERVAL_SELECTION The default Any combination of items can be selected The user must explicitly deselect items

No matter which selection mode your list uses the list fires list selection events whenever the selection changes You can process these events by adding a list selection listener to the list with the addListSelectionListener method A list selection listener must implement one method valueChanged Here is the valueChanged method for the listener in ListDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting() == false)

if (listgetSelectedIndex() == -1) No selection disable fire button fireButtonsetEnabled(false)

else Selection enable the fire button fireButtonsetEnabled(true) Many list selection events can be generated from a single user action such as a mouse click The getValueIsAdjusting method returns true if the user is still manipulating the selection This particular program is interested only in the final result of the users action so the valueChanged method does something only if getValueIsAdjusting returns false

Because the list is in single-selection mode this code can use getSelectedIndex to get the index of the just-selected item JList provides other methods for setting or getting the selection when the selection mode allows more than one item to be selected If you want you can listen for events on the lists list selection model rather than on the list itself ListSelectionDemo is an example that shows how to listen for list selection events on the list selection model and lets you change the selection mode of a list dynamically

Adding Items to and Removing Items from a ListThe ListDemo example that we showed previously features a list whose contents can change You can find the source code for ListDemo in ListDemojava Here is the ListDemo code that creates a mutable list model object puts the initial items in it and uses the list model to create a list

listModel = new DefaultListModel()listModeladdElement(Jane Doe)listModeladdElement(John Smith)listModeladdElement(Kathy Green)

list = new JList(listModel)This particular program uses an instance of DefaultListModel a class provided by Swing In spite of the class name a list does not have a DefaultListModel unless your program explicitly makes it so If DefaultListModel does not suit your needs you can write a custom list model which must adhere to the ListModel interface

The following code snippet shows the actionPerformed method for the action listener registered on the Fire button The bold line of code removes the selected item in the list The remaining lines in the method disable the fire button if the list is now empty and make another selection if it is not

public void actionPerformed(ActionEvent e) int index = listgetSelectedIndex() listModelremove(index)

int size = listModelgetSize()

if (size == 0) Nobodys left disable firing fireButtonsetEnabled(false)

else Select an index if (index == listModelgetSize()) removed item in last position index--

listsetSelectedIndex(index) listensureIndexIsVisible(index)

Here is the actionPerformed method for the action listener shared by the Hire button and the text field

public void actionPerformed(ActionEvent e) String name = employeeNamegetText()

User did not type in a unique name if (nameequals() || alreadyInList(name)) ToolkitgetDefaultToolkit()beep() employeeNamerequestFocusInWindow() employeeNameselectAll() return

int index = listgetSelectedIndex() get selected index if (index == -1) no selection so insert at beginning index = 0 else add after the selected item index++

listModelinsertElementAt(employeeNamegetText() index)

Reset the text field employeeNamerequestFocusInWindow() employeeNamesetText()

Select the new item and make it visible listsetSelectedIndex(index) listensureIndexIsVisible(index)This code uses the list models insertElementAt method to insert the new name after the current selection or if no selection exists at the beginning of the list If you just wish to add to the end of the list you can use DefaultListModels addElement method instead

Whenever items are added to removed from or modified in a list the list model fires list data events Refer to How to Write a List Data Listener for information about listening for these events That section contains an example that is similar to ListDemo but adds buttons that move items up or down in the list

Writing a Custom Cell RendererA list uses an object called a cell renderer to display each of its items The default cell renderer knows how to display strings and icons and it displays Objects by invoking toString If you want to change the way the default renderer display icons or strings or if you want behavior different than what is provided by toString you can implement a custom cell renderer Take these steps to provide a custom cell renderer for a list

Write a class that implements the ListCellRenderer interface Create an instance of your class and call the lists setCellRenderer using the instance as

an argument

We do not provide an example of a list with a custom cell renderer but we do have an example of a combo box with a custom renderer mdash and combo boxes use the same type of renderer as lists See the example described in Providing a Custom Renderer

The List API The following tables list the commonly used JList constructors and methods Other methods you are most likely to invoke on a JList object are those such as setPreferredSize that its superclasses provide See The JComponent API for tables of commonly used inherited methods

Much of the operation of a list is managed by other objects The items in the list are managed by a list model object the selection is managed by a list selection model object and most programs put a list in a scroll pane to handle scrolling For the most part you do not need to worry about the models because JList creates them as necessary and you interact with them implicitly with JLists convenience methods

That said the API for using lists falls into these categories

Initializing List Data Displaying the List Managing the Lists Selection Managing List Data

Initializing List Data

Method or Constructor

Purpose

JList(ListModel) JList(Object[]) JList(Vector) JList()

Create a list with the initial list items specified The second and third constructors implicitly create an immutable ListModel you should not subsequently modify the passed-in array or Vector

void setModel(ListModel) ListModel getModel()

Set or get the model that contains the contents of the list

void setListData(Object[]) void setListData(Vector)

Set the items in the list These methods implicitly create an immutable ListModel

Displaying the List

Method Purpose

void setVisibleRowCount(int) int getVisibleRowCount()

Set or get the visibleRowCount property For a VERTICAL layout orientation this sets or gets the preferred number of rows to display without requiring scrolling For the HORIZONTAL_WRAP or VERTICAL_WRAP layout orientations it defines how the cells wrap See the setLayoutOrientation(int) for more information The default value of this property is VERTICAL

void setLayoutOrientation(int) int getLayoutOrientation()

Set or get the way list cells are laid out The possible layout formats are specified by the JList-defined values VERTICAL (a single column of cells the default) HORIZONTAL_WRAP (newspaper style with the content flowing horizontally then vertically) and VERTICAL_WRAP (newspaper style with the content flowing vertically then horizontally)

int getFirstVisibleIndex() int getLastVisibleIndex()

Get the index of the first or last visible item

void ensureIndexIsVisible(int)

Scroll so that the specified index is visible within the viewport that this list is in

Managing the Lists Selection

Method Purpose

void addListSelectionListener(ListSelectionListener)

Register to receive notification of selection changes

void setSelectedIndex(int) void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectionInterval(int int)

Set the current selection as indicated Use setSelectionMode to set what ranges of selections are acceptable The boolean argument specifies whether the list should attempt to scroll itself so that the selected item is visible

int getAnchorSelectionIndex() int getLeadSelectionIndex() int getSelectedIndex() int getMinSelectionIndex() int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Get information about the current selection as indicated

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 8: Crear Un Modelo y Asignarlo a Una JList

Because the list is in single-selection mode this code can use getSelectedIndex to get the index of the just-selected item JList provides other methods for setting or getting the selection when the selection mode allows more than one item to be selected If you want you can listen for events on the lists list selection model rather than on the list itself ListSelectionDemo is an example that shows how to listen for list selection events on the list selection model and lets you change the selection mode of a list dynamically

Adding Items to and Removing Items from a ListThe ListDemo example that we showed previously features a list whose contents can change You can find the source code for ListDemo in ListDemojava Here is the ListDemo code that creates a mutable list model object puts the initial items in it and uses the list model to create a list

listModel = new DefaultListModel()listModeladdElement(Jane Doe)listModeladdElement(John Smith)listModeladdElement(Kathy Green)

list = new JList(listModel)This particular program uses an instance of DefaultListModel a class provided by Swing In spite of the class name a list does not have a DefaultListModel unless your program explicitly makes it so If DefaultListModel does not suit your needs you can write a custom list model which must adhere to the ListModel interface

The following code snippet shows the actionPerformed method for the action listener registered on the Fire button The bold line of code removes the selected item in the list The remaining lines in the method disable the fire button if the list is now empty and make another selection if it is not

public void actionPerformed(ActionEvent e) int index = listgetSelectedIndex() listModelremove(index)

int size = listModelgetSize()

if (size == 0) Nobodys left disable firing fireButtonsetEnabled(false)

else Select an index if (index == listModelgetSize()) removed item in last position index--

listsetSelectedIndex(index) listensureIndexIsVisible(index)

Here is the actionPerformed method for the action listener shared by the Hire button and the text field

public void actionPerformed(ActionEvent e) String name = employeeNamegetText()

User did not type in a unique name if (nameequals() || alreadyInList(name)) ToolkitgetDefaultToolkit()beep() employeeNamerequestFocusInWindow() employeeNameselectAll() return

int index = listgetSelectedIndex() get selected index if (index == -1) no selection so insert at beginning index = 0 else add after the selected item index++

listModelinsertElementAt(employeeNamegetText() index)

Reset the text field employeeNamerequestFocusInWindow() employeeNamesetText()

Select the new item and make it visible listsetSelectedIndex(index) listensureIndexIsVisible(index)This code uses the list models insertElementAt method to insert the new name after the current selection or if no selection exists at the beginning of the list If you just wish to add to the end of the list you can use DefaultListModels addElement method instead

Whenever items are added to removed from or modified in a list the list model fires list data events Refer to How to Write a List Data Listener for information about listening for these events That section contains an example that is similar to ListDemo but adds buttons that move items up or down in the list

Writing a Custom Cell RendererA list uses an object called a cell renderer to display each of its items The default cell renderer knows how to display strings and icons and it displays Objects by invoking toString If you want to change the way the default renderer display icons or strings or if you want behavior different than what is provided by toString you can implement a custom cell renderer Take these steps to provide a custom cell renderer for a list

Write a class that implements the ListCellRenderer interface Create an instance of your class and call the lists setCellRenderer using the instance as

an argument

We do not provide an example of a list with a custom cell renderer but we do have an example of a combo box with a custom renderer mdash and combo boxes use the same type of renderer as lists See the example described in Providing a Custom Renderer

The List API The following tables list the commonly used JList constructors and methods Other methods you are most likely to invoke on a JList object are those such as setPreferredSize that its superclasses provide See The JComponent API for tables of commonly used inherited methods

Much of the operation of a list is managed by other objects The items in the list are managed by a list model object the selection is managed by a list selection model object and most programs put a list in a scroll pane to handle scrolling For the most part you do not need to worry about the models because JList creates them as necessary and you interact with them implicitly with JLists convenience methods

That said the API for using lists falls into these categories

Initializing List Data Displaying the List Managing the Lists Selection Managing List Data

Initializing List Data

Method or Constructor

Purpose

JList(ListModel) JList(Object[]) JList(Vector) JList()

Create a list with the initial list items specified The second and third constructors implicitly create an immutable ListModel you should not subsequently modify the passed-in array or Vector

void setModel(ListModel) ListModel getModel()

Set or get the model that contains the contents of the list

void setListData(Object[]) void setListData(Vector)

Set the items in the list These methods implicitly create an immutable ListModel

Displaying the List

Method Purpose

void setVisibleRowCount(int) int getVisibleRowCount()

Set or get the visibleRowCount property For a VERTICAL layout orientation this sets or gets the preferred number of rows to display without requiring scrolling For the HORIZONTAL_WRAP or VERTICAL_WRAP layout orientations it defines how the cells wrap See the setLayoutOrientation(int) for more information The default value of this property is VERTICAL

void setLayoutOrientation(int) int getLayoutOrientation()

Set or get the way list cells are laid out The possible layout formats are specified by the JList-defined values VERTICAL (a single column of cells the default) HORIZONTAL_WRAP (newspaper style with the content flowing horizontally then vertically) and VERTICAL_WRAP (newspaper style with the content flowing vertically then horizontally)

int getFirstVisibleIndex() int getLastVisibleIndex()

Get the index of the first or last visible item

void ensureIndexIsVisible(int)

Scroll so that the specified index is visible within the viewport that this list is in

Managing the Lists Selection

Method Purpose

void addListSelectionListener(ListSelectionListener)

Register to receive notification of selection changes

void setSelectedIndex(int) void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectionInterval(int int)

Set the current selection as indicated Use setSelectionMode to set what ranges of selections are acceptable The boolean argument specifies whether the list should attempt to scroll itself so that the selected item is visible

int getAnchorSelectionIndex() int getLeadSelectionIndex() int getSelectedIndex() int getMinSelectionIndex() int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Get information about the current selection as indicated

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 9: Crear Un Modelo y Asignarlo a Una JList

Here is the actionPerformed method for the action listener shared by the Hire button and the text field

public void actionPerformed(ActionEvent e) String name = employeeNamegetText()

User did not type in a unique name if (nameequals() || alreadyInList(name)) ToolkitgetDefaultToolkit()beep() employeeNamerequestFocusInWindow() employeeNameselectAll() return

int index = listgetSelectedIndex() get selected index if (index == -1) no selection so insert at beginning index = 0 else add after the selected item index++

listModelinsertElementAt(employeeNamegetText() index)

Reset the text field employeeNamerequestFocusInWindow() employeeNamesetText()

Select the new item and make it visible listsetSelectedIndex(index) listensureIndexIsVisible(index)This code uses the list models insertElementAt method to insert the new name after the current selection or if no selection exists at the beginning of the list If you just wish to add to the end of the list you can use DefaultListModels addElement method instead

Whenever items are added to removed from or modified in a list the list model fires list data events Refer to How to Write a List Data Listener for information about listening for these events That section contains an example that is similar to ListDemo but adds buttons that move items up or down in the list

Writing a Custom Cell RendererA list uses an object called a cell renderer to display each of its items The default cell renderer knows how to display strings and icons and it displays Objects by invoking toString If you want to change the way the default renderer display icons or strings or if you want behavior different than what is provided by toString you can implement a custom cell renderer Take these steps to provide a custom cell renderer for a list

Write a class that implements the ListCellRenderer interface Create an instance of your class and call the lists setCellRenderer using the instance as

an argument

We do not provide an example of a list with a custom cell renderer but we do have an example of a combo box with a custom renderer mdash and combo boxes use the same type of renderer as lists See the example described in Providing a Custom Renderer

The List API The following tables list the commonly used JList constructors and methods Other methods you are most likely to invoke on a JList object are those such as setPreferredSize that its superclasses provide See The JComponent API for tables of commonly used inherited methods

Much of the operation of a list is managed by other objects The items in the list are managed by a list model object the selection is managed by a list selection model object and most programs put a list in a scroll pane to handle scrolling For the most part you do not need to worry about the models because JList creates them as necessary and you interact with them implicitly with JLists convenience methods

That said the API for using lists falls into these categories

Initializing List Data Displaying the List Managing the Lists Selection Managing List Data

Initializing List Data

Method or Constructor

Purpose

JList(ListModel) JList(Object[]) JList(Vector) JList()

Create a list with the initial list items specified The second and third constructors implicitly create an immutable ListModel you should not subsequently modify the passed-in array or Vector

void setModel(ListModel) ListModel getModel()

Set or get the model that contains the contents of the list

void setListData(Object[]) void setListData(Vector)

Set the items in the list These methods implicitly create an immutable ListModel

Displaying the List

Method Purpose

void setVisibleRowCount(int) int getVisibleRowCount()

Set or get the visibleRowCount property For a VERTICAL layout orientation this sets or gets the preferred number of rows to display without requiring scrolling For the HORIZONTAL_WRAP or VERTICAL_WRAP layout orientations it defines how the cells wrap See the setLayoutOrientation(int) for more information The default value of this property is VERTICAL

void setLayoutOrientation(int) int getLayoutOrientation()

Set or get the way list cells are laid out The possible layout formats are specified by the JList-defined values VERTICAL (a single column of cells the default) HORIZONTAL_WRAP (newspaper style with the content flowing horizontally then vertically) and VERTICAL_WRAP (newspaper style with the content flowing vertically then horizontally)

int getFirstVisibleIndex() int getLastVisibleIndex()

Get the index of the first or last visible item

void ensureIndexIsVisible(int)

Scroll so that the specified index is visible within the viewport that this list is in

Managing the Lists Selection

Method Purpose

void addListSelectionListener(ListSelectionListener)

Register to receive notification of selection changes

void setSelectedIndex(int) void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectionInterval(int int)

Set the current selection as indicated Use setSelectionMode to set what ranges of selections are acceptable The boolean argument specifies whether the list should attempt to scroll itself so that the selected item is visible

int getAnchorSelectionIndex() int getLeadSelectionIndex() int getSelectedIndex() int getMinSelectionIndex() int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Get information about the current selection as indicated

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 10: Crear Un Modelo y Asignarlo a Una JList

We do not provide an example of a list with a custom cell renderer but we do have an example of a combo box with a custom renderer mdash and combo boxes use the same type of renderer as lists See the example described in Providing a Custom Renderer

The List API The following tables list the commonly used JList constructors and methods Other methods you are most likely to invoke on a JList object are those such as setPreferredSize that its superclasses provide See The JComponent API for tables of commonly used inherited methods

Much of the operation of a list is managed by other objects The items in the list are managed by a list model object the selection is managed by a list selection model object and most programs put a list in a scroll pane to handle scrolling For the most part you do not need to worry about the models because JList creates them as necessary and you interact with them implicitly with JLists convenience methods

That said the API for using lists falls into these categories

Initializing List Data Displaying the List Managing the Lists Selection Managing List Data

Initializing List Data

Method or Constructor

Purpose

JList(ListModel) JList(Object[]) JList(Vector) JList()

Create a list with the initial list items specified The second and third constructors implicitly create an immutable ListModel you should not subsequently modify the passed-in array or Vector

void setModel(ListModel) ListModel getModel()

Set or get the model that contains the contents of the list

void setListData(Object[]) void setListData(Vector)

Set the items in the list These methods implicitly create an immutable ListModel

Displaying the List

Method Purpose

void setVisibleRowCount(int) int getVisibleRowCount()

Set or get the visibleRowCount property For a VERTICAL layout orientation this sets or gets the preferred number of rows to display without requiring scrolling For the HORIZONTAL_WRAP or VERTICAL_WRAP layout orientations it defines how the cells wrap See the setLayoutOrientation(int) for more information The default value of this property is VERTICAL

void setLayoutOrientation(int) int getLayoutOrientation()

Set or get the way list cells are laid out The possible layout formats are specified by the JList-defined values VERTICAL (a single column of cells the default) HORIZONTAL_WRAP (newspaper style with the content flowing horizontally then vertically) and VERTICAL_WRAP (newspaper style with the content flowing vertically then horizontally)

int getFirstVisibleIndex() int getLastVisibleIndex()

Get the index of the first or last visible item

void ensureIndexIsVisible(int)

Scroll so that the specified index is visible within the viewport that this list is in

Managing the Lists Selection

Method Purpose

void addListSelectionListener(ListSelectionListener)

Register to receive notification of selection changes

void setSelectedIndex(int) void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectionInterval(int int)

Set the current selection as indicated Use setSelectionMode to set what ranges of selections are acceptable The boolean argument specifies whether the list should attempt to scroll itself so that the selected item is visible

int getAnchorSelectionIndex() int getLeadSelectionIndex() int getSelectedIndex() int getMinSelectionIndex() int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Get information about the current selection as indicated

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 11: Crear Un Modelo y Asignarlo a Una JList

void setVisibleRowCount(int) int getVisibleRowCount()

Set or get the visibleRowCount property For a VERTICAL layout orientation this sets or gets the preferred number of rows to display without requiring scrolling For the HORIZONTAL_WRAP or VERTICAL_WRAP layout orientations it defines how the cells wrap See the setLayoutOrientation(int) for more information The default value of this property is VERTICAL

void setLayoutOrientation(int) int getLayoutOrientation()

Set or get the way list cells are laid out The possible layout formats are specified by the JList-defined values VERTICAL (a single column of cells the default) HORIZONTAL_WRAP (newspaper style with the content flowing horizontally then vertically) and VERTICAL_WRAP (newspaper style with the content flowing vertically then horizontally)

int getFirstVisibleIndex() int getLastVisibleIndex()

Get the index of the first or last visible item

void ensureIndexIsVisible(int)

Scroll so that the specified index is visible within the viewport that this list is in

Managing the Lists Selection

Method Purpose

void addListSelectionListener(ListSelectionListener)

Register to receive notification of selection changes

void setSelectedIndex(int) void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectionInterval(int int)

Set the current selection as indicated Use setSelectionMode to set what ranges of selections are acceptable The boolean argument specifies whether the list should attempt to scroll itself so that the selected item is visible

int getAnchorSelectionIndex() int getLeadSelectionIndex() int getSelectedIndex() int getMinSelectionIndex() int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Get information about the current selection as indicated

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 12: Crear Un Modelo y Asignarlo a Una JList

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Set or get the selection mode Acceptable values are SINGLE_SELECTION SINGLE_INTERVAL_SELECTION or MULTIPLE_INTERVAL_SELECTION (the default) which are defined in ListSelectionModel

void clearSelection() boolean isSelectionEmpty()

Set or get whether any items are selected

boolean isSelectedIndex(int) Determine whether the specified index is selected

Managing List Data

Class or Method Purpose

int getNextMatch(String int javaxswingtextPositionBias)

Given the starting index search through the list for an item that starts with the specified string and return that index (or -1 if the string is not found) The third argument which specifies the search direction can be either PositionBiasForward or PositionBiasBackward For example if you have a 6-item list getNextMatch(Matisse 5 javaxswingtextPositionBiasForward) searches for the string Matisse in the item at index 5 then (if necessary) at index 0 index 1 and so on

void setDragEnabled(boolean) boolean getDragEnabled()

Set or get the property that determines whether automatic drag handling is enabled See Drag and Drop and Data Transfer for more details

JList

Archivos necesarios

El JList nos permite crear una lista para agregar a nuestras aplicaciones A diferencia del JComboBox que puede crecer muy Mainjava

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 13: Crear Un Modelo y Asignarlo a Una JList

faacutecilmente el JList es un poco maacutes difiacutecil de manejar pero nos permite hacer cosas maacutes interesantes que el JComboBox Tambieacuten veremos coacutemo utilizar algunas otras clases que nos van a permitir manejar un JList de una manera maacutes eficiente por ejemplo para permitir que crezca de manera dinaacutemica Podemos utilizar listas para mostrar a los jugadores en un juego de mesa o tambieacuten podemos utilizarla para mostrar una lista de contactos

La clase que incluye este trial es un programa que uacutenicamente incluye un JList con los nombres de los empleados de una empresa El programa nos permite contratar maacutes empleados y despedirlos seguacuten sea necesario

iquestCoacutemo utilizar un JList

Construir un JList es muy sencillo

si no queremos que sea dinaacutemico es decir si queremos que el usuario no pueda agregar maacutes items Para hacerlo basta con declarar un arreglo de String y pasarlo como

paraacutemetro al constructor del JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 14: Crear Un Modelo y Asignarlo a Una JList

Para hacer que el JList tenga una

barra de desplazamiento es necesario utilizar una clase auxiliar llamada JScrollPane Esta clase

se va a detallar en alguacuten trial maacutes adelante pero por el momento se debe de construir como se ve en la foto

Es importante notar que el JScrollPane es el que se antildeade a la forma y no la lista en si Esto es porque el JScollPane contiene a la lista

Para escuchar eventos en una lista (por ejemplo para saber cuando se seleccionoacute un elemento) es necesario importar un nuevo tipo de escuchador de eventos Primero que nada tenemos que importar la libreriacutea javaxswingevent despueacutes la clase tiene que implementar ListSelectionListener y por uacuteltimo tenemos que hacer un meacutetodo valueChanged() que recibe un objeto ListSelectionEvent

Dentro de este meacutetodo podemos utilizar la variable ListSelectionEvent para saber cuaacutel fue el JList que mandoacute llamar el meacutetodo mediante el meacutetodo getSource() que es igual que el que habiacuteamos utilizado hasta ahora

Un paso maacutes allaacute

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 15: Crear Un Modelo y Asignarlo a Una JList

Una parte importante de las listas es el poder agregar y eliminar registros Para hacer esto necesitamos crear un objeto llamado DefaultListModel e iniciar el

JList con este objeto en vez de

con el arreglo de String como

habiacuteamos visto en la primera parte Como podemos ver aqui podemos agregar elementos al DefaultListModel utilizando el

meacutetodo addElement() que recibe

un String con el elemento a

antildeadir Una vez que ya tengamos el DefaultListModel con todos los

elementos que queramos es hora de crear la lista con el constructor que recibe el DefaultListModel

Recuerda que la variable listModel que estamos utilizando

en el coacutedigo es un objeto tipo DefaultListModel

Una vez que ya creamos la lista podemos utilizar nuestro DefaultListModel para eliminar los elementos que queramos si sabemos el iacutendice en que lugar fueron agregados (que es la misma posicioacuten en la que aparecen en el JList) con el meacutetodo removeElementAt() que recibe uacutenicamente un nuacutemero que es el iacutendice a borrar Tambieacuten hay un meacutetodo del JList que nos permite saber queacute elemento estaacute

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 16: Crear Un Modelo y Asignarlo a Una JList

seleccionado El meacutetodo getSelectedIndex() nos devuelve el iacutendice del elemento que esteacute seleccionado en ese momento

Entonces para poder borrar un elemento de un JList podemos utilizar juntos el meacutetodo para borrar el registro en un iacutendice y el meacutetodo que nos devuelve el iacutendice que estaacute actualmente seleccioando con lo que podemos borrar el elemento que seleccionoacute el usuario Si nuestro JList permite elegir maacutes de un elemento entonces el meacutetodo getSelectedIndex() no funciona para leer un poco maacutes acerca de coacutemo manejar listas donde se puedan manejar multiples selecciones consulten la clase Mainjava que se les da al principio

Tambieacuten es importante saber coacutemo guardar los datos de un DefaultListModel a un archivo

Tambieacuten hay un meacutetodo que nos devuelve que tantos elementos se han agregado al DefaultListModel llamado

getSize() este meacutetodo lo

podemos utilizar para hacer un for

que guarde desde 0 hasta el tamantildeo todos los registros que encuentre es maacutes sencillo manejar este tipo de guardado en archivos de texto por lo que les recomiendo que lo hagan asiacute

JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 17: Crear Un Modelo y Asignarlo a Una JList

Java Swing Tutorial Explaining the JList Component JList provides a scrollable set of items from which one or more may be selected JList can be populated from an Array or Vector JList does not support scrolling directlymdashinstead the list must be associated with a scrollpane The view port used by the scrollpane can also have a user-defined border JList actions are handled using ListSelectionListener

JList Source Codeimport javaxswingimport javaxswingeventListSelectionEventimport javaxswingeventListSelectionListenerimport javaawtimport javaawtevent

public class JListDemo extends JFrame

JList listString[] listColorNames = black blue green

yellowwhite

Color[] listColorValues = ColorBLACK ColorBLUE ColorGREEN

ColorYELLOW ColorWHITE Container contentpanepublic JListDemo()

super(List Source Demo)contentpane = getContentPane()contentpanesetLayout(new FlowLayout())list = new JList(listColorNames)listsetSelectedIndex(0)

listsetSelectionMode(ListSelectionModelSINGLE_SELECTION)contentpaneadd(new JScrollPane(list))listaddListSelectionListener(new

ListSelectionListener()

public void valueChanged(ListSelectionEvent e)

contentpanesetBackground(listColorValues[listgetSelectedIndex()])

)setSize(200 200)setVisible(true)

public static void main(String[] args)

JListDemo test = new JListDemo()testsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE)

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 18: Crear Un Modelo y Asignarlo a Una JList

Output

Create a JList Component in Java

In this section you will learn how to create a JList component of swing JList is a component of GUI

It provides the multiple items in a list and some times it shows the data in multiple columns in a list

Lists are used to select item from the items group like combo box but the major difference between

list and the combo box is that you can select only one item from the combo box since you can

select more than one item at once from the list You can easily add or remove items from or to the

JList component of swing The JList component has been shown in this article below

This program provides a List The given List has multiple subjects as items like Math Computer

Physics and Chemistry

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 19: Crear Un Modelo y Asignarlo a Una JList

JList

This is the class which is used to create a list which contains items This class extends the

JComponent class in java swing There has been using string array values in this program

Here is the code of program

import javaxswing

public class CreateJList public static void main(String[] args) String subject[] = Math Computer Phisics Chemestry JFrame frame = new JFrame(Creating a JList Component) JPanel panel = new JPanel() framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE) JList list = new JList(subject) framesetUndecorated(true) framegetRootPane()setWindowDecorationStyle(JRootPanePLAIN_DIALOG) paneladd(list) frameadd(panel) framesetSize(400400) framesetVisible(true)

Coacutedigo de Seleccioacuten Muacuteltiple

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenCopiar elementos de una JList a otra

Fichero PruebaSeleccionMultiplejava

1 Coacutemo copiar elementos de una lista a otra

2 import javaawt

3 import javaawtevent

4 import javaxswing

5

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 20: Crear Un Modelo y Asignarlo a Una JList

6 public class PruebaSeleccionMultiple extends JFrame

7

8 private JList listaColores listaCopia

9 private JButton botonCopiar

10 private final String nombresColores[] = Negro Azul Cyan

11 Gris oscuro Gris Verde Gris claro Magenta Naranja

12 Rosa Rojo Blanco Amarillo

13

14 configurar GUI

15 public PruebaSeleccionMultiple()

16

17 super( Listas de seleccioacuten muacuteltiple )

18

19 obtener panel de contenido y establecer su esquema

20 Container contenedor = getContentPane()

21 contenedorsetLayout( new FlowLayout() )

22

23 establecer objeto JList listaColores

24 listaColores = new JList( nombresColores )

25 listaColoressetVisibleRowCount( 5 )

26 listaColoressetSelectionMode(

27 ListSelectionModelMULTIPLE_INTERVAL_SELECTION )

28 contenedoradd( new JScrollPane( listaColores ) )

29

30 crear botoacuten copiar y registrar su componente de escucha

31 botonCopiar = new JButton( Copiar gtgtgt )

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 21: Crear Un Modelo y Asignarlo a Una JList

32 botonCopiaraddActionListener(

33

34 new ActionListener() clase interna anoacutenima

35

36 manejar evento de botoacuten

37 public void actionPerformed( ActionEvent evento )

38

39 colocar valores seleccionados en listaCopia

40 listaCopiasetListData( listaColoresgetSelectedValues() )

41

42

43 fin de clase interna anoacutenima

44

45 ) fin de la llamada a addActionListener

46

47 contenedoradd( botonCopiar )

48

49 establecer objeto JList listaCopia

50 listaCopia = new JList( )

51 listaCopiasetVisibleRowCount( 5 )

52 listaCopiasetFixedCellWidth( 100 )

53 listaCopiasetFixedCellHeight( 15 )

54 listaCopiasetSelectionMode(

55 ListSelectionModelSINGLE_INTERVAL_SELECTION )

56 contenedoradd( new JScrollPane( listaCopia ) )

57

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 22: Crear Un Modelo y Asignarlo a Una JList

58 setSize( 325 130 )

59 setVisible( true )

60

61 fin del constructor PruebaSeleccionMultiple

62

63 public static void main( String args[] )

64

65 PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple()

66 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

67

68

69 fin de la clase PruebaSeleccionMultiple

Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos

Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden

DescripcioacutenDibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics

Fichero LineasRectsOvalosjava

1 Dibujo de liacuteneas rectaacutengulos y oacutevalos

2 import javaawt

3 import javaxswing

4

5 public class LineasRectsOvalos extends JFrame

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 23: Crear Un Modelo y Asignarlo a Una JList

6

7 establecer la cadena de la barra de tiacutetulo y dimensiones de la ventana

8 public LineasRectsOvalos()

9

10 super( Dibujo de liacuteneas rectaacutengulos y oacutevalos )

11

12 setSize( 400 165 )

13 setVisible( true )

14

15

16 mostrar varias liacuteneas rectaacutengulos y oacutevalos

17 public void paint( Graphics g )

18

19 superpaint( g ) llamar al meacutetodo paint de la superclase

20

21 gsetColor( ColorRED )

22 gdrawLine( 5 30 350 30 )

23

24 gsetColor( ColorBLUE )

25 gdrawRect( 5 40 90 55 )

26 gfillRect( 100 40 90 55 )

27

28 gsetColor( ColorCYAN )

29 gfillRoundRect( 195 40 90 55 50 50 )

30 gdrawRoundRect( 290 40 90 55 20 20 )

31

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 24: Crear Un Modelo y Asignarlo a Una JList

32 gsetColor( ColorYELLOW )

33 gdraw3DRect( 5 100 90 55 true )

34 gfill3DRect( 100 100 90 55 false )

35

36 gsetColor( ColorMAGENTA )

37 gdrawOval( 195 100 90 55 )

38 gfillOval( 290 100 90 55 )

39

40 fin del meacutetodo paint

41

42 ejecutar la aplicacioacuten

43 public static void main( String args[] )

44

45 LineasRectsOvalos aplicacion = new LineasRectsOvalos()

46 aplicacionsetDefaultCloseOperation( JFrameEXIT_ON_CLOSE )

47

48

49 fin de la clase LineasRectsOvalos

MOSTRAR RECTANGULO CON Rectangle

holacomo estantengo esto DefaultListModel modelo = new DefaultListModel()

if (listaLibros== null) listaLibros = new JList(modelo) listaLibrossetBounds(new Rectangle(228 60 188 190))

listaLibrossetListData(LibreriagetInstancia_Libreria()getListaDeLibros()toArray()) y no se como hacer para que me muestre los datos en la pantalla me aparece un rectangulo blanco nomasque tengo maliquestiquestiquestiquest bueno espero que me puedan ayudar

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 25: Crear Un Modelo y Asignarlo a Una JList

CREAR LA CLASE RECTANGULO

Volvemos de nuevo al estudio de la clase Rectangulo que contiene un subobjeto de la clase Punto

A dichas clases se les ha antildeadido la redefinicioacuten de la funcioacuten toString miembro de la clase base Object (esta redefinicioacuten no es necesaria aunque es ilustrativa para explicar el comportamiento de un objeto compuesto) Como podemos apreciar ambas clases implementan el interface Serializable

En el cuadro que sigue se muestra parte del coacutedigo que define la clase Punto

public class Punto implements javaioSerializable private int x private int yotros miembros

public String toString() return new String((+x+ +y+))

La definicioacuten de la clase Rectangulo se muestra en el siguiente cuadro

public class Rectangulo implements javaioSerializable private int ancho private int alto private Punto origenotras funciones miembro public String toString() String texto=origen+ w+ancho+ h+alto return texto

Como podemos observar en la definicioacuten de toString de la clase Rectangulo se hace una llamada impliacutecita a la funcioacuten toString miembro de la clase Punto La composicioacuten como se ha estudiado permite reutilizar el coacutedigo existente

Para guardar en un archivo un objeto de la clase Rectangulo hay que seguir los mismos pasos que para guardar un objeto de la clase Lista o de la clase Cliente

Rectangulo rect=new Rectangulo(new Punto(1010) 30 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto compueston)

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 26: Crear Un Modelo y Asignarlo a Una JList

salidawriteObject(rect) salidaclose()

Para reconstruir un objeto de la clase Rectangulo a partir de los datos guardados en el archivo hay que seguir los mismos pasos que en los dos ejemplos previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject() Rectangulo obj1=(Rectangulo)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(str+obj1) Systemoutprintln(------------------------------) entradaclose()

En el caso de que nos olvidemos de implementar el interface Serializable en la clase Punto que describe el subobjeto de la clase Rectangulo se lanza una excepcioacuten imprimieacutendose en la consola

javaioNotSerializableException archivo5Punto

HERENCIA CON FIGURAS COMO RECTANGULO Y CIRCUNFERENCIA

En el apartado anterior hemos examinado la composicioacuten ahora examinemos la herencia En el capiacutetulo de la herencia examinamos una jerarquiacutea formada por una clase base denominada Figura y dos clases derivadas denominadas Circulo y Rectangulo

Como podemos observar en el cuadro adjunto se han hecho dos modificaciones La clase base Figura implementa el interface Serializable y en la clase Circulo en vez de usar el nuacutemero PI proporcionado por la clase Math definimos una constante estaacutetica PI con una aproximacioacuten de 4 decimales De este modo probamos el comportamiento de un miembro estaacutetico en el proceso de serializacioacuten

Para serializar objetos de una jerarquiacutea solamente la clase base tiene que implementar el interface Serializable

public abstract class Figura implements javaioSerializable protected int x protected int y public Figura(int x int y) thisx=x thisy=y public abstract double area()

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 27: Crear Un Modelo y Asignarlo a Una JList

class Circulo extends Figura protected double radio private static final double PI=31416 public Circulo(int x int y double radio) super(xy) thisradio=radio public double area() return PIradioradio

class Rectangulo extends Figura protected double ancho alto public Rectangulo(int x int y double ancho double alto) super(xy) thisancho=ancho thisalto=alto public double area() return anchoalto

Vamos a serializar dos objetos uno de la clase Rectangulo y otro de la clase Circulo y a continuacioacuten reconstruiremos dichos objetos Una vez de que dispongamos de los objetos llamaremos a las funciones area para calcular el aacuterea de cada una de las figuras

Para guardar en el archivo figuraobj un objeto fig1 de la clase Rectangulo y otro objeto fig2 de la clase Circulo se siguen los mismos pasos que hemos estudiado en apartados anteriores

Figura fig1=new Rectangulo(1015 30 60) Figura fig2=new Circulo(1219 60)

ObjectOutputStream salida=new ObjectOutputStream(new FileOutputStream(figuraobj)) salidawriteObject(guardar un objeto de una clase derivadan) salidawriteObject(fig1) salidawriteObject(fig2) salidaclose()

Fijarse que fig1 y fig2 son dos referencias de la clase base Figura en la que se guardan objetos de las clases derivadas Rectangulo y Circulo respectivamente

Para leer los datos guardados en el archivo figuraobj y reconstruir dos objetos obj1 y obj2 de las clases Rectangulo y Circulo respectivamente se procede de forma similar a la estudiada en los apartados previos

ObjectInputStream entrada=new ObjectInputStream(new FileInputStream(figuraobj)) String str=(String)entradareadObject()

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 28: Crear Un Modelo y Asignarlo a Una JList

Figura obj1=(Figura)entradareadObject() Figura obj2=(Figura)entradareadObject() Systemoutprintln(------------------------------) Systemoutprintln(obj1getClass()getName()+ origen (+obj1x+ +obj1y+)+ area=+obj1area()) Systemoutprintln(obj2getClass()getName()+ origen (+obj2x+ +obj2y+)+ area=+obj2area()) Systemoutprintln(------------------------------) entradaclose()

Fijarse que obj1 y obj2 son referencias a la clase base Figura Sin embargo cuando obj1 llama a la funcioacuten area nos devuelve (correctamente) el aacuterea del rectaacutengulo y cuando obj2 llama a la funcioacuten area devuelve el aacuterea del ciacuterculo

Fijarse tambieacuten que aunque PI es un miembro estaacutetico de la clase Circulo se reconstruye el objeto obj2 con el valor del miembro estaacutetico con el que se calcula el aacuterea del ciacuterculo

La clase Punto

La clase Punto tiene dos miembros dato la abscisa x y la ordenada y de un punto del plano Definimos dos constructores uno por defecto que situacutea el punto en el origen y otro constructor expliacutecito que proporciona las coordenadas x e y de un punto concreto

public class Punto int x int y funciones miembro

El constructor expliacutecito de la clase Punto podemos escribirlo de dos formas

public Punto(int x1 int y1) x = x1

y = y1

Cuando el nombre de los paraacutemetros es el mismo que el nombre de los miembros datos escribimos

public Punto(int x int y) thisx = x

thisy = y

thisx que estaacute a la izquierda y que recibe el dato x que se le pasa al constructor se refiere al miembro dato mientras que x que estaacute a la derecha es el paraacutemetro this es una palabra reservada que guarda una refrencia al objeto propio u objeto actual Tendremos ocasioacuten a lo largo del curso de encontrar esta palabra en distintas situaciones

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 29: Crear Un Modelo y Asignarlo a Una JList

La funcioacuten miembro desplazar simplemente cambia la posicioacuten del punto desde (x y) a (x+dx y+dy) La funcioacuten desplazar cuando es llamada recibe en sus dos paraacutemetros dx y dy el desplazamiento del punto y actualiza las coordenadas x e y del punto La funcioacuten no retorna ninguacuten valor

public void desplazar(int dx int dy) x+=dx y+=dy

Para crear un objeto de la clase Punto cuyas coordenadas x e y valgan repectivamente 10 y 23 escribimos

Punto p=new Punto(10 23)

Para desplazar el punto p 10 unidades hacia la izquierda y 40 hacia abajo llamamos desde el objeto p a la funcioacuten desplazar y le pasamos el desplazamiento horizontal y vertical

pdesplazar(-10 40)

El coacutedigo completo de la clase Punto es el siguiente

public class Punto int x = 0 int y = 0 public Punto(int x int y) thisx = x

thisy = y public Punto() x=0 y=0 void desplazar(int dx int dy) x+=dx y+=dy

La clase Rectangulo

La clase Rectangulo tiene como miembros dato el origen que es un objeto de la clase Punto y las dimensiones ancho y alto

public class Rectangulo Punto origen int ancho int alto funciones miembro

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 30: Crear Un Modelo y Asignarlo a Una JList

El constructor por defecto crea un rectaacutengulo situado en el punto 00 y con dimensiones nulas

public Rectangulo() origen = new Punto(0 0) ancho=0 alto=0

El constructor expliacutecito crea un rectaacutengulo situado en un determinado punto p y con unas dimensiones que se le pasan en el constructor

public Rectangulo(Punto p int w int h) origen = p ancho = w alto = h

Podemos definir otros constructores en teacuterminos del constructor expliacutecito usando la palabra reservada this

public Rectangulo(Punto p) this(p 0 0)

public Rectangulo(int w int h)

this(new Punto(0 0) w h)

El primero crea un rectaacutengulo de dimensiones nulas situado en el punto p El segundo crea un rectaacutengulo de unas determinadas dimensiones situaacutendolo en el punto 0 0 Dentro del cuerpo de cada constructor se llama al constructor expliacutecito mediante this pasaacutendole en sus paraacutemetros los valores apropiados

Para desplazar un rectaacutengulo trasladamos su origen (esquina superior izquierda) a otra posicioacuten sin cambiar su anchura o altura Desde el objeto origen llamamos a la funcioacuten desplazar miembro de la clase Punto

void desplazar(int dx int dy) origendesplazar(dx dy)

El coacutedigo completo de la nueva clase Rectangulo es el siguiente

public class Rectangulo Punto origen int ancho int alto

public Rectangulo()

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 31: Crear Un Modelo y Asignarlo a Una JList

origen = new Punto(0 0) ancho=0 alto=0

public Rectangulo(Punto p)

this(p 0 0) public Rectangulo(int w int h)

this(new Punto(0 0) w h) public Rectangulo(Punto p int w int h)

origen = p ancho = w alto = h

void desplazar(int dx int dy)

origendesplazar(dx dy) int calcularArea()

return ancho alto

Objetos de la clase Rectangulo

Para crear un rectaacutengulo rect1 situado en el punto (0 0) y cuyas dimensiones son 100 y 200 escribimos

Rectangulo rect1=new Rectangulo(100 200)

Para crear un rectaacutengulo rect2 situado en el punto de coordenadas 44 70 y de dimensiones nulas escribimos

Punto p=new Punto(44 70)Rectangulo rect2=new Rectangulo(p)

O bien en una soacutela liacutenea

Rectangulo rect2=new Rectangulo(new Punto(44 70))

Para desplazar el rectaacutengulo rect1 desde el punto (100 200) a otro punto situado 40 unidades hacia la derecha y 20 hacia abajo sin modificar sus dimensiones escribimos

rect1desplazar(40 20)

Para hallar y mostrar el aacuterea del rectaacutengulo rect1 podemos escribir

Systemoutprintln(el aacuterea es +rect1calcularArea())

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 32: Crear Un Modelo y Asignarlo a Una JList

Para hallar el aacuterea de un rectaacutengulo de 100 unidades de largo y 50 de alto y guardar el resultado en la variable entera areaRect escribimos en una soacutela liacutenea

int areaRect=new Rectangulo(100 50)calcularArea()public class RectanguloApp public static void main(String[] args) Rectangulo rect1=new Rectangulo(100 200) Rectangulo rect2=new Rectangulo(new Punto(44 70)) Rectangulo rect3=new Rectangulo() rect1desplazar(40 20) Systemoutprintln(el aacuterea es +rect1calcularArea()) int areaRect=new Rectangulo(100 50)calcularArea() Systemoutprintln(el aacuterea es +areaRect)

MOSTRAR UNA CAJA DE TEXTO EN UN LISTBOX

Supongamos que tengo un archivo en txt en este se ve asi

Nombre Telefono Pedro 545668 Carlos 2646468 Rosa 294686

quiero mostrar esto usando una lsita o list box en java

El coacutedigo seriacutea algo asiacute

Primero hay que crear una clase que extiende de AbstractListModel MyListModel extends AbstractListModel

Vector _data=new Vector()

public MyListModel(String fichero)

javaioBufferedReader reader= new javaioBufferedReader( new javaioInputStreamReader( new javaioFileInputStream(fichero))) String linea=null while (null =(linea=reader ReadLine()))

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 33: Crear Un Modelo y Asignarlo a Una JList

_data Add(linea)

public int getSize() return Short MAX_VALUE public Object getElementAt(int index) _data Get(index)

Y luego para crear la lista

JList lista=new JList(new MyListModel(Nombrearchivo Txt))

EJEMPLOS DE LISTA

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la

manipulacioacuten de muchos elementos Se crean utilizando meacutetodos similares a los de los

botones Choice La lista es visible todo el tiempo utilizaacutendose una barra de

desplazamiento para visualizar los elementos que no caben en el aacuterea que aparece en

la pantalla

El ejemplo siguiente Listajava crea una lista que muestra cuatro liacuteneas a la vez y no

permite seleccioacuten muacuteltiple

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 34: Crear Un Modelo y Asignarlo a Una JList

import javaawt

import javaappletApplet

public class Lista extends Applet

public void init()

List l = new List( 4false )

laddItem( Mercurio )

laddItem( Venus )

laddItem( Tierra )

laddItem( Marte )

laddItem( Jupiter )

laddItem( Saturno )

laddItem( Neptuno )

laddItem( Urano )

laddItem( Pluton )

add( l )

public boolean action( Event evtObject obj )

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 35: Crear Un Modelo y Asignarlo a Una JList

if( evttarget instanceof List )

Systemoutprintln( Entrada de la Lista + obj )

return true

Para acceder a los elementos seleccionados se utilizan los meacutetodos getSelectedItem()

o getSelectedItems() Para listas de seleccioacuten simple cualquier seleccioacuten con doble-

click en la lista dispararaacute el meacutetodo action() de la misma forma que con los eventos de

seleccioacuten en menuacutes

En el applet siguiente ListaMultjava se permite al usuario seleccionar varios

elementos de los que constituyen la lista En la figura se muestra la apariencia de una

seleccioacuten muacuteltiple en este applet

import javaawt

import javaappletApplet

public class ListaMult extends Applet

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 36: Crear Un Modelo y Asignarlo a Una JList

List lm = new List( 6true )

public void init()

Button boton = new Button( Aceptar )

lmaddItem( Mercurio )

lmaddItem( Venus )

lmaddItem( Tierra )

lmaddItem( Marte )

lmaddItem( Jupiter )

lmaddItem( Saturno )

lmaddItem( Neptuno )

lmaddItem( Urano )

lmaddItem( Pluton )

add( lm )

add( boton )

public boolean action( Event evtObject obj )

if( evttarget instanceof Button )

if( Aceptarequals( obj ) )

String seleccion[]

seleccion = lmgetSelectedItems()

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 37: Crear Un Modelo y Asignarlo a Una JList

for( int i=0 i lt seleccionlength i++ )

Systemoutprintln( seleccion[i] )

return true

En este caso de la seleccioacuten muacuteltiple en una lista utilizamos un evento externo para

disparar las acciones asociadas a la lista En el ejemplo hemos incluido un botoacuten para

generar el evento que hace que el applet recoja los elementos que hay seleccionados

en la lista

COMO USAR UN JLIST CON IMAacuteGENES

El JList es un componente que permite seleccionar un o varios items de un panel desplegable Es muy util cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 38: Crear Un Modelo y Asignarlo a Una JList

Todo JList esta compuesto por un DefaultListModel es el que define el modelo de la JList es decir el que agregaraacute y borraraacute los items de la JList

Como agregar elementos a un JList

Hay varias formas de hacerlo una de ellas es usar el DefaultListModel ya que tiene el meacutetodo addElement que inserta un elemento a la vez

view source

print

1 JList lista = new JList()

2 DefaultListModel modelo

3

4 listasetModel(modelo) 5 modeloaddElement(uno) 6 modeloaddElement(dos)

El meacutetodo addElement recibe por paraacutemetro un objeto de tipo Object esto lo podemos aprovechar para insertar tambien imaacutegenes

view source

print

1 se crea un imagen a partir de una ruta absoluta del proyecto donde se encuentra la imagen fisica

2 ImageIcon imagen = new ImageIcon(getClass()getResource(imagenesimagenpng))

3

4 se inserta la imagen en el modelo 5 modeloaddElement(imagen)

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 39: Crear Un Modelo y Asignarlo a Una JList

Como eliminar elementos de un JList

Se pueden eliminar elementos de cualquier posicioacuten incluso se puede vaciar la lista sigamos trabajando con el modelo de la JList

view source

print

1 elimina el primer elemento de la JList

2 modeloremoveElementAt(0)

3

4 Vaciacutea la JList 5 modeloclear()

Como alinear los items en la JList

Para darle a los items de la JList un alineamiento especiacutefico se debe de crear un objeto de tipo UIResource eacutesta propiedad permite darle esa caracteriacutestica a todas las celdas de la JList

view source

print

1 UIResource posicion = new UIResource()

2

3 se alinean las celdas a la izquierda

4 posicionsetHorizontalAlignment(SwingConstantsRIGHT)

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 40: Crear Un Modelo y Asignarlo a Una JList

5

6 listasetCellRenderer(posicion)

Las constantes de posicioacuten son SwingConstantsLEFT SwingConstantsRIGHT SwingConstantsCENTER

JList con Iconos

Ahora veremos como lo que vimos anteriormente tambieacuten lo podemos aplicar a otros componentes no solo a los JComboBox este post lo hago a peticioacuten de usuario que dejo su comentario en la entrada sobre un filtro para un JList pueden ver la entrada y el comentario desde aquiacute

Imaacutegenes

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 41: Crear Un Modelo y Asignarlo a Una JList

Coacutedigo

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 42: Crear Un Modelo y Asignarlo a Una JList

Clase Principal

package Clases

import javaawtFlowLayoutimport javaxswingJAppletimport javaxswingJList

public class Principal extends JApplet JList lista public void init() lista=new JList() Object datos[]=new Object[4] datos[0]=Elemento 1 datos[1]=Elemento 2 datos[2]=Java Zone datos[3]=Elemento 3 listasetListData(datos) RenderLista rl=new RenderLista() listasetCellRenderer(rl) add(lista)

Clase RenderLista

package Clases

import javaawtColor

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 43: Crear Un Modelo y Asignarlo a Una JList

import javaawtComponentimport javaawtFontimport javautilHashtable

import javaxswing

public class RenderLista extends JLabel implements ListCellRenderer Hashtableltobject imageicongt elementos ImageIcon icononulo=new ImageIcon(thisgetClass()getResource(Iconosimagen nulopng)) public RenderLista() elementos=new Hashtableltobject imageicongt() ImageIcon icono1=new ImageIcon(thisgetClass()getResource(Iconosimagen 1png)) ImageIcon icono2=new ImageIcon(thisgetClass()getResource(Iconosimagen 2png)) ImageIcon icono3=new ImageIcon(thisgetClass()getResource(Iconosimagen 3png)) elementosput(Elemento 1 icono1) elementosput(Elemento 2 icono2) elementosput(Elemento 3 icono3)

Override public Component getListCellRendererComponent(JList list Object valueint index boolean isSelected boolean cellHasFocus) if(elementosget(value)=null) setIcon(elementosget(value)) setText(+value) if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) else setIcon(icononulo) setText(+value)

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 44: Crear Un Modelo y Asignarlo a Una JList

if(isSelected) setFont(new Font(VerdanaFontBOLD16)) else setFont(null) return this

El coacutedigo es muy parecido a la entrada anterior sobre iconos en un JComboBox pero de todas formas hareacute la explicacioacuten

La clase principal lo que hace es crear un JList crea un vector de Objects para insertarlo al JList y ademas creamos un objeto RenderLista el cual se encarga de todo Luego le mando dicho objeto a la lista con el meacutetodo setCellRenderer() de la clase JList

La clase RenderLista crea un HashTable para almacenar los iconos predefinidos ademas esta clase hereda de JLabel para facilitarnos el uso de Iconos y tambieacuten se implementa la interfaz ListCellRenderer la cual posee un meacutetodo que debemos implementar y es el meacutetodo que nos permite devolver lo que queramos en este caso un JLabel lo que se devuelva debe heredar de Component

Lo que hacemos en el meacutetodo es comparar lo que se antildeade a la lista para ver si esta en la coleccioacuten de los iconos predefinidos si es asiacute se coloca el icono indicado y sino se coloca un icono por defecto Ademas en este meacutetodo indicamos que si el elemento es seleccionado que la fuente cambie a Verdana se ponga en negrita y aumente de tamantildeo

Coacutemo utilizar la Clase ListsUn JList le presenta al usuario un grupo de iacutetems para elegir Los iacutetems pueden ser cualquier Object Normalmente son un String Un lista puede tener muchos iacutetems o podriacutea crecer hasta tenerlos Coacutemo la mayoriacutea de las listas se situacutean dentro de paneles desplazables JList es una clase scroll-savvy

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 45: Crear Un Modelo y Asignarlo a Una JList

Ademaacutes de las listas los siguientes componentes Swing tambieacuten presentan muacuteltiples iacutetems seleccionables al usuario check boxes combo boxesmenus radio buttons y tables Soacutelos los checkbox las tablas y las listas permiten seleccionar varios iacutetems a la vez

Aquiacute podemos ver una imagen de una aplicacioacuten que utiliza JList para mostrar los nombres de las imaacutegenes a ver

Intenta esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en SplitPaneDemojava imagenamesproperties proporciona los nombres de las imaacutegenes para ponerlos en el JList

2 Elige una imagen de la lista Utiliza las barras de desplazamiento para ver maacutes nombres

Abajo estaacute el coacutedigo de SplitPaneDemojava que crea y configura la lista

where member variables are declared this Vector is initialized from a properties filestatic Vector imageListwhere the GUI is created Create the list of images and put it in a scroll paneJList listOfImages = new JList(imageList)listOfImagessetSelectionMode(ListSelectionModelSINGLE_SELECTION)listOfImagessetSelectedIndex(0)listOfImagesaddListSelectionListener(this)JScrollPane listScrollPane = new JScrollPane(listOfImages)El coacutedigo utiliza un objeto Vector para proporcionar una lista con los iacutetems iniciales Tambieacuten podemos inicializar una lista con un array o con un objeto ListModel

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 46: Crear Un Modelo y Asignarlo a Una JList

En este ejemplo el Vector contiene strings obtenidas desde un fichero de propiedades Sin embargo los valores de la lista pueden ser cualquier Object en cuyo caso el meacutetodo toString de la clase Object proporciona el texto a mostrar Para mostrar un iacutetem como una imagen u otro valor no-texto debemos proporcionar una celta personalizada con setCellRenderer

Por defecto una lista permite que cualquier combinacioacuten de iacutetems sea seleccionada a la vez Podemos utilizar un valor por defecto diferente utilizando el meacutetodo setSelectionMode Por ejemplo SplitPaneDemo configura el modo de seleccioacuten a SINGLE_SELECTION (una constante definida por ListSelectionModel) para que soacutelo pueda seleccionarse un iacutetem de la lista La siguiente lista describe los tres modos de seleccioacuten disponibles

Modo Descripcioacuten Ejemplo

SINGLE_SELECTION Soacutelo un iacutetem de la lista puede ser seleccionado Cuando el usuario selecciona un iacutetem cualquier iacutetem anteriormente seleccionado se deselecciona primero

SINGLE_INTERVAL_SELECTION Se pueden seleccionar varios iacutetems contiguos Cuando el usuario empieza una nueva seleccioacuten cualquier iacutetem anteriormente seleccionado se deselecciona primero

MULTIPLE_INTERVAL_SELECTION El valor defecto Se puede seleccionar cualquier combinacioacuten de iacutetems El usuario debe deseleccionar expliacutecitamente los iacutetems

No importa el modo de seleccioacuten que utiliza la lista siempre dispara eventos list selection cuando cambia la seleccioacuten Se pueden procesar esos eventos antildeadiendo un Oyente de list selection a la lista con el meacutetodo addListSelectionListener

Un oyente de list selection debe implementar un meacutetodo valueChanged Aquiacute podemos ver el meacutetodo valueChanged para el oyente de SplitPaneDemo

public void valueChanged(ListSelectionEvent e) if (egetValueIsAdjusting()) return

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 47: Crear Un Modelo y Asignarlo a Una JList

JList theList = (JList)egetSource() if (theListisSelectionEmpty()) picturesetIcon(null) else int index = theListgetSelectedIndex() ImageIcon newImage = new ImageIcon(images + (String)imageListelementAt(index)) picturesetIcon(newImage) picturesetPreferredSize(new Dimension(newImagegetIconWidth() newImagegetIconHeight() )) picturerevalidate() Observa que el meacutetodo valueChanged soacutelo actualiza la imagen si getValueIsAdjusting devuelve false La mayoriacutea de los eventos list selection pueden ser generados desde una simple accioacuten del usuario como una pulsacioacuten del ratoacuten Este programa particular soacutelo estaacute interesado en el resultado final de la accioacuten del usuario

Coacutemo la lista esta en modo de seleccioacuten sencillo este coacutedigo puede utilizar getSelectedIndex para obtener el iacutendice soacutelo del iacutendice seleccionado JList proporciona otros meacutetodos para Seleccionar u Obtener la Seleccioacuten cuando el modo de seleccioacuten permite seleccionar maacutes de un iacutetem Por ejemplo cambiemos el modo de seleccioacuten de una lista dinaacutemicamente podemos ver Ejemplos de Manejos de Eventos List Selection

El API ListLas siguientes tablas listan los meacutetodos y constructores maacutes utilizados de JList Otros meacutetodos uacutetiles estaacuten definidos por las clases JComponent y Component

Muchas de las operaciones de una lista estaacuten manejadas por otros objetos Por ejemplo los iacutetems de la lista estaacuten manejados por un objeto ListModel la seleccioacuten estaacute manejada por un objeto ListSelectionModel y la mayoriacutea de los programas ponen una lista en un panel desplazable para menajar el desplazamiento No tenemos que preocuparnos de la mayor parte de estos objetos auxiliares porque JList los crea cuando son necesarios y nosotros interactuamos con ellos implicitamente con los meacutetodos de conveniencia de JList

Coacutemo se ha dicho el API para utilizar Lists de divide en estas categoriacuteas

Seleccionar los iacutetems de una Lista Manejar la Seleccioacuten de una Lista Trabajar con un ScrollPane

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 48: Crear Un Modelo y Asignarlo a Una JList

Seleccionar los iacutetems de una Lista

Meacutetodo Propoacutesito

JList(ListModel) JList(Object[]) JList(Vector)

Crea una lista con los iacutetems especificados El segundo y tercer constructores crean implicitamente un ListModel

void setModel(ListModel) ListModel getModel()

Selecciona u obtiene el modelo que contiene el contenido de la lista Podemos modificar dinaacutemicamente el contenido de la lista llamado a los meacutetodos con el objeto devuelto por getModel

void setListData(Object[]) void setListData(Vector)

Selecciona los iacutetems de la lista Estos meacutetodos crean impliacutecitamente un ListModel

Manejar la Seleccioacuten de una Lista

Meacutetodo Propoacutesito

void addListSelectionListener( ListSelectionListener)

Registra para recibir notificacioacuten de los cambios de seleccioacuten

void setSelectedIndex(int)

void setSelectedIndices(int[]) void setSelectedValue(Object boolean) void setSelectedInterval(int int)

Configura la seleccioacuten actual como indicada Utiliza el meacutetodo setSelectionMode para los rangos de selecciones aceptables El argumento booleano especifica su la lista deberiacutea intentar desplazarse a siacute misma para que el iacutetem seleccionado sea visible

int getSelectedIndex() int getMinSelectionIndex()

int getMaxSelectionIndex() int[] getSelectedIndices() Object getSelectedValue()

Obtiene informacioacuten sobre la seleccioacuten actual

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 49: Crear Un Modelo y Asignarlo a Una JList

Object[] getSelectedValues()

void setSelectionMode(int) int getSelectionMode()

Selecciona u obtiene el modod de seleccioacuten Los valores aceptables son SINGLE_SELECTION SINGLE_INTERVAL_SELECTION o MULTIPLE_INTERVAL_SELECTION

void clearSelection() boolean isSelectionEmpty()

Selecciona u obtiene si hay alguacuten iacutetem seleccionado

boolean isSelectedIndex(int)

Determina si el iacutendice especiacuteficado estaacute seleccionado

Trabajar con un Scroll Pane

Meacutetodo Propoacutesito

void ensureIndexIsVisible(int)

Desplaza para que el iacutendice especificado sea visible dentro del recuadro de la lista

int getFirstVisibleIndex() int getLastVisibleIndex()

Obtiene el iacutendice del primer o el uacuteltimo elemento visible de la lista

void setVisibleRowCount(int) int getVisibleRowCount()

Selecciona u obtiene cuacuteantas filas de la lista son visibles

Coacutemo escribir un Oyente de List SelectionLos eventos List selection ocurren cuando una seleccioacuten en una list o una table cambia o acaba de cambiar Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado La clase JList tambieacuten ofrece la opcioacuten de registrar un oyente sobre la propia lista mejor que directamente al selection model de la lista

Meacutetodos de Evento List SelectionEl interface ListSelectionListener soacutelo tiene un meacutetodo y por lo tanto ni tiene la correspondiente clase adaptador Aquiacute estaacute el meacutetodo

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 50: Crear Un Modelo y Asignarlo a Una JList

void valueChanged(ListSelectionEvent)

Se le llama cuando cambia la seleccioacuten del componente escuchado tambieacuten se la llama despueacutes de que la seleccioacuten haya cambiado

Ejemplos de Manejo de Eventos List SelectionLa seccioacuten Coacutemo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista)

Esta seccioacuten proporciona un ejemplo que mustra coacutemo escuchar este tipo de eventos en un selection model El selection model es compartido por un lista y una tabla Dinaacutemicamente podemos cambiar el modo de seleccioacuten a uno de los tres modos soportados

single selection single interval selection multiple interval selection

Aquiacute podmeos ver una imaacutegen del ejemplo ejecutaacutendose

Prueba esto

1 Compila y ejecuta la aplicacioacuten El coacutedigo fuente estaacute en ListSelectionDemojava

2 Selecciona y deselecciona items de la lista y de la tabla Los comandos requeridos de ratoacuten y de teclado para seleccionar iacutetems dependen del aspecto y comportamiento Para Metal pulsa el botoacuten izquierdo delr atoacuten para empezar una seleccioacuten usa la tecla Shift para extender una seleccioacuten contiguumla y usa la tecla Control para extender una seleccioacuten

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 51: Crear Un Modelo y Asignarlo a Una JList

discontiguumla Arrastrar el ratoacuten mueve o extiende la seleccioacuten dependiendeo del modo de seleccioacuten

Aquiacute estaacute el coacutedigo de ListSelectionDemojava que configura el modelo de seleccioacuten y le antildeade un oyente

where the member variables are definedJList listJTable table in the init method listSelectionModel = listgetSelectionModel() listSelectionModeladdListSelectionListener( new SharedListSelectionHandler()) tablesetSelectionModel(listSelectionModel)Y aquiacute estaacute el coacutedigo para el oyente que funciona para todos los modos de seleccioacuten posibles

class SharedListSelectionHandler implements ListSelectionListener public void valueChanged(ListSelectionEvent e) ListSelectionModel lsm = (ListSelectionModel)egetSource()

int firstIndex = egetFirstIndex() int lastIndex = egetLastIndex() boolean isAdjusting = egetValueIsAdjusting() outputappend(Event for indexes + firstIndex + - + lastIndex + isAdjusting is + isAdjusting + selected indexes)

if (lsmisSelectionEmpty()) outputappend( ltnonegt) else Find out which indexes are selected int minIndex = lsmgetMinSelectionIndex() int maxIndex = lsmgetMaxSelectionIndex() for (int i = minIndex i lt= maxIndex i++) if (lsmisSelectedIndex(i)) outputappend( + i) outputappend(newline)

El meacutetodo valueChanged muestra el primer y uacuteltimo iacutendices reportados por el evento el valor de la bandera isAdjusting del evento y el indice actualmente seleccionado

Observa que el primer y uacutetlimo indices reportados por el eventos indican el rango inclusivo de iacutetems para los que la seleccioacuten ha cambiado Si el

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 52: Crear Un Modelo y Asignarlo a Una JList

modo de seleccioacuten es multiple interval selection algunos iacutetems dentro del rango podriacutean no haber cambiado La bandera isAdjusting es true si el usuario todaviacutea estaacute manipulando la seleccioacuten y false si el usuario ha terminado de modificar la seleccioacuten

El objeto ListSelectionEvent pasado dentro de valueChanged indica soacutelo que la seleccioacuten ha cambiado El evento no contiene informacioacuten sobre la seleccioacuten actual Por eso este meacutetodo le pide al selection model que se imagine la seleccioacuten actual

Nota La salida de este programa depende de la verioacuten Swing que estemos utilizando Swing 10x contiene varios bugs y la operacioacuten de listas y tablas era inconsistente Las versiones posteriores de Swing corrigieron estos problemas

La clase ListSelectionEventCada meacutetodo de evento list selection tiene un soacutelo paraacutemetro un objeto ListSelectionEvent Este objeto le dice al oyente que la seleccioacuten ha cambiado Un evento list selecton puede indicar un cambio en la seleccioacuten de muacuteltiples iacutetems discontiguumlos de la lista

Para obtener la fuente de un ListSelectionEvent se usa el meacutetodo getSource que ListSelectionEvent hereda de EventObject Si registramos un oyente de list selection directamente sobre una lista la fuente de cada evento seraacute la propia lista De otra forma seriacutea el selection model

La clase ListSelectionEvent define los siguientes meacutetodos

int getFirstIndex()

Devuelve el iacutendice del primer iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getLastIndex()

Devuelve el iacutendice del uacuteltimo iacutetem cuyo valor de seleccioacuten ha cambiado Observa que para selecciones de intervalo muacuteltiple el primer y uacuteltimo iacutetems es seguro que han cambiado pero los iacutetems que hay entre medias podriacutean no haberlo hecho

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent
Page 53: Crear Un Modelo y Asignarlo a Una JList

int getValueIsAdjusting()

Devuelve true si se estaacute modificando todaviacutea la seleccioacuten Muchos oyentes de list selectionsoacutelo estaacuten intereados en el estado final de la seleccioacuten y pueden ignorar eventos cuando este meacutetodo devuelve true

  • Crear un Modelo y Asignarlo a una JList
  • Otro Meacutetodo
  • How to Use Lists
    • Creating a Model
    • Initializing a List
    • Selecting Items in a List
    • Adding Items to and Removing Items from a List
    • Writing a Custom Cell Renderer
    • The List API
      • JList
        • Archivos necesarios
        • iquestCoacutemo utilizar un JList
        • Un paso maacutes allaacute
          • JList
          • JList Source Code
            • Coacutedigo de Seleccioacuten Muacuteltiple
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Copiar elementos de una JList a otra
            • Coacutedigo de Liacuteneas Rectaacutengulos y oacutevalos
            • Ejemplos praacutecticos para la programacioacuten en java Visualiza el coacutedigo fuente o descaacutergalo directamente a tu PC Estes ejemplos son baacutesicos para la programar en java y puramente orientativos Esperemos que te ayuden
            • Descripcioacuten Dibujo de liacuteneas rectaacutengulos y oacutevalos con la clase Graphics
            • La clase Punto
            • La clase Rectangulo
            • Objetos de la clase Rectangulo
            • Coacutemo utilizar la Clase Lists
              • El API List
                • Coacutemo escribir un Oyente de List Selection
                  • Meacutetodos de Evento List Selection
                  • Ejemplos de Manejo de Eventos List Selection
                  • La clase ListSelectionEvent