package docen_swing; import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*; /******************************************************************************** * JApplet que muestra interacciones entre JList JButton, JTextField y JEditorPane * Eventos: * - Botón "Añadir": toma texto del JTextField y lo añade al JList y al JEditorPane * - Botón "Eliminar": elimina el item seleccionado en el JList y añade al JEditorPane **********************************************************************************/ public class lista_texto extends JApplet { JButton bot_añadir = new JButton( "Añadir a lista" ); JButton bot_eliminar = new JButton( "Eliminar de lista" ); JList lista = new JList(); JTextField text = new JTextField(); JEditorPane panel_text = new JEditorPane(); /********** Inicializar el applet **********/ public void init() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } /********** Configura e instala componentes y paneles ***********/ private void jbInit() throws Exception { /**** Asignamos listener de eventos a los botones *****/ bot_añadir.addActionListener(new adaptador_bot_añadir(this)); bot_eliminar.addActionListener(new adaptador_bot_eliminar(this)); /**** Configurar campo de edición: color y texto inicial *****/ text.setBackground( Color.ORANGE ); text.setText("Ponga aquí (JTextField) lo que desea añadir"); /*** Configuramos la lista: cargar datos y poner scroll ***/ cargar_datos_lista(); JScrollPane scroll_lista = new JScrollPane( lista ); // Asignamos scroll a lista /***** Configuramos el panel de texto (mitad inferior del applet) *****/ JScrollPane scroll_text = new JScrollPane( panel_text ); // Asignamos scroll al panel de texto panel_text.setBackground(Color.CYAN); panel_text.setText( "Esto es un pequeño editor de texto (clase JEditorPane) " + " con scroll (clase JScrollPane)" ); /**** Obtener panel principal y poner gestor de diseño grid ***/ Container cont_global = this.getContentPane(); cont_global.setLayout( new GridLayout(2,1,5,5) ); /*** Creamos los paneles. panel_sup ocupa la mitad superior del applet y panel_botones ocupa la parte norte de panel_sup ***/ JPanel panel_sup = new JPanel( new BorderLayout() ); JPanel panel_botones = new JPanel( new FlowLayout() ); /*** Ponemos en panel_botones los botones ****/ panel_botones.add( bot_añadir ); panel_botones.add( bot_eliminar ); /*** Ponemos en panel_sup el panel_botones, lista y campo de texto ****/ panel_sup.add( panel_botones, BorderLayout.NORTH ); panel_sup.add( scroll_lista, BorderLayout.CENTER ); panel_sup.add( text, BorderLayout.SOUTH ); /*** Ponemos en el panel global (container) el panel_sup y el editor (con scroll) ****/ cont_global.add( panel_sup ); cont_global.add( scroll_text ); } /////////////////// FIN de jbInit() \\\\\\\\\\\\\\\\\\\\\ /************************************************************************* * Carga datos en la lista. * Muestra que los datos se pueden manejar con un modelo de datos por defecto * (DefaultListModel). * Retorna el número de elementos *************************************************************************/ int cargar_datos_lista( ) { DefaultListModel modelo = new DefaultListModel(); modelo.addElement( "Buenos dias" ); modelo.addElement( "Buenas noches" ); modelo.addElement( "¿Me sigue?" ); modelo.addElement( "Pues va a ser que no" ); modelo.addElement( "Me llamo Pablo" ); modelo.addElement( "¿Qué tal está?" ); lista.setModel(modelo); return modelo.getSize(); } /******************************************************************************** * Gestión de Evento: * - Botón "Añadir": toma texto del JTextField y lo añade al JList y al JEditorPane **********************************************************************************/ void bot_añadir_actionPerformed(ActionEvent e) { String t = text.getText(); // Obtener texto de JTextField /**** Añadir texto al modelo de la lista (actualiza automáticamente la lista) ***/ DefaultListModel model = (DefaultListModel) lista.getModel(); model.addElement( t ); /*** Seleccionar el item añadido a la lista ***/ int num_item = model.getSize(); lista.setSelectedIndex( num_item-1 ); /**** Añadir texto al JEditorPane ************/ String texto_anterior = panel_text.getText(); panel_text.setText( texto_anterior + "\n" + t ); } /******************************************************************************** * Gestión de Evento: * - Botón "Eliminar": elimina el item seleccionado en el JList y añade al JEditorPane **********************************************************************************/ void bot_eliminar_actionPerformed(ActionEvent e) { /*** Obtener el modelo de la lista y el número de item seleccionado ***/ DefaultListModel model = (DefaultListModel) lista.getModel(); int num_item_selected = lista.getSelectedIndex(); // Obtener nº de item seleccionado /**** Si hay un item seleccionado, se elimina del modelo de la lista y se añade a panel de texto ****/ if ( num_item_selected > -1) { /**** Eliminar item seleccionado del modelo de la lista (ésta se actualiza) ****/ String t = (String) model.getElementAt(num_item_selected); // Obtener item seleccionado model.remove(lista.getSelectedIndex()); /**** Añadir texto al JEditorPane ************/ String texto_anterior = panel_text.getText(); panel_text.setText( texto_anterior + "\n" + t ); } } } /***************************************************************** * El listener del botón añadir *****************************************************************/ class adaptador_bot_añadir implements java.awt.event.ActionListener { lista_texto adaptee; // El JApplet adaptador_bot_añadir(lista_texto adaptee) { this.adaptee = adaptee; // JApplet } public void actionPerformed(ActionEvent e) { adaptee.bot_añadir_actionPerformed(e); // Método del applet que recibe el evento } } /***************************************************************** * El listener del botón eliminar *****************************************************************/ class adaptador_bot_eliminar implements java.awt.event.ActionListener { lista_texto adaptee; adaptador_bot_eliminar(lista_texto adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.bot_eliminar_actionPerformed(e); } }