aliaspool
Usuario (Argentina)
Les comento primero que las notificaciones en el Tray son los iconos que se encuentran a la izquierda de la hora en Windows. Bueno, encontré una clase para poder crear en java un objeto con acciones y opciones. La clase la estuve modificando un poco para que en el constructor reciba los parámetros necesarios para que está clase sea genérica y se pueda llamar desde otra clase e independizarse de la clase SystemTray y poder hacer más de una. El constructor tiene los parámetros: String sPathImgIcon (Que es el path donde se encuentra el icono que va a mostrar en las notificaciones) Vector vMenuActionListener (Que contiene los action listeners que va a escuchar el iconito cuando le haces click derecho y se despliega un menu en pop-up) Vector vMenuActionListenerNames (Que contiene los nombres que se mostrarán en el menu que están relacionados con los action listeners del vector anterior) String sToolTip (Es el texto que muestra cuando dejas el cursor encima del icono) ActionListener al (Es el evento que se efectua al hacer doble click en el icono) package codigos; import java.awt.*; import java.awt.event.*; import java.util.Vector; public class ThrSystemTray { public ThrSystemTray(String sPathImgIcon,Vector vMenuActionListener, Vector vMenuActionListenerNames, String sToolTip, ActionListener al) { //se verifica que el SystemTray sea soportado if (SystemTray.isSupported()) { //se obtiene una instancia estática de la clase SystemTray SystemTray tray = SystemTray.getSystemTray(); //esta es la Imagen de icono Image ImagenIcono = Toolkit.getDefaultToolkit().getImage(sPathImgIcon); //este listener nos permite capturar cualquier tipo de evento //que se haga con el mouse sobre el icono MouseListener mouseListener = new MouseListener() { public void mouseClicked(MouseEvent e) { //System.out.println("Icono del System Tray - Mouse clicked!"; ); } public void mouseEntered(MouseEvent e) { //System.out.println("Icono del System Tray - Mouse entered!"; ); } public void mouseExited(MouseEvent e) { //System.out.println("Icono del System Tray - Mouse exited!"; ); } public void mousePressed(MouseEvent e) { //System.out.println("Icono del System Tray - Mouse pressed!"; ); } public void mouseReleased(MouseEvent e) { //System.out.println("Icono del System Tray - Mouse released!"; ); } }; //Se agregan los listeners que se obtuvieron por parametro //menu que aparece al hacer click derecho PopupMenu popup = new PopupMenu(); MenuItem item ; for (int i = 0 ; i < vMenuActionListener.size() ; i++){ item = new MenuItem(vMenuActionListenerNames.get(i).toString()); item.addActionListener((ActionListener) vMenuActionListener.get(i)); popup.add(item); } //iniciamos el objeto TrayIcon iconoSystemTray = new TrayIcon(ImagenIcono, sToolTip, popup); iconoSystemTray.setImageAutoSize(true); //este tipo de listener captura el doble click sobre el icono iconoSystemTray.addActionListener(al); iconoSystemTray.addMouseListener(mouseListener); //se debe capturar una excepción en caso que falle la adicion de un icono try { tray.add(iconoSystemTray); } catch (AWTException e) { System.err.println("No es posible agregar el icono al System Tray"; ); } } else System.err.println("Tu sistema no soporta el System Tray"; ); } public void setToolTip(String tooltip){ iconoSystemTray.setToolTip(tooltip); } //se declara el objeto tipo icono private TrayIcon iconoSystemTray; }
Este posteo es un tutorial para crear una tabla que se vea en interfaz gráfica. 1 Definimos los atributos que son necesarios para una tabla. Un panel donde se encuentra la tabla (JPanel), Ejemplo: private JPanel p_tabla; La propia tabla (JTable), Ejemplo: private JTable table; Un arreglo de una dimensión donde se pondrán los nombres de las columnas Ejemplo: String cAgenda []= new String; Un arreglo de dos dimensiones que servirá para los datos de la tabla Ejemplo: String aAgenda[][]= new String; Algo que es opcional pero lo recomiendo es identificar en una variable descriptiva el nombre de la columna asignado su número de columna. Ejemplo: private int colNro = 0; private int colNombre = 1; private int colAlarma = 2; private int colEstado = 3; private int colResponsable = 4; private int colReclama = 5; private int colcount = 6; 2 Asignamos los nombres de las columnas cAgenda = "Número"; cAgenda = "Nombre"; cAgenda = "Alarma"; cAgenda = "Estado"; cAgenda = "Responsable"; cAgenda = "Reclama"; 3 Asignamos los datos. En mi caso extraje los datos de una base de datos por medio del RMI. Donde almacene el Result Set en rsReclamos. for (int m=0; m < rsReclamos.getRSRowCount();m++) { rsReclamos.setRSCursor(m); aAgenda = rsReclamos.getRSColContents( "nro" ).trim(); aAgenda = rsReclamos.getRSColContents( "f_name" ).trim() + " " + rsReclamos.getRSColContents("l_name" ).trim(); aAgenda = rsReclamos.getRSColContents("alarma" ).toString().trim().substring(0,16); aAgenda = estado(rsReclamos.getRSColContents("estado" ).trim()); aAgenda = rsReclamos.getRSColContents("responsable" ).trim(); aAgenda = rsReclamos.getRSColContents("reclama" ).trim(); } 4 Guardamos los nombres de las columnas y los datos en un modelo. Este modelo tiene 2 metodos. Uno es para marcar que no se puedan editar las columnas y el otro para definir el tipo de datos de las celdas, en este caso el tipo de datos son String. DefaultTableModel myModel = new DefaultTableModel(aAgenda ,cAgenda){ public boolean isCellEditable(int row, int col) { return false; } public Class getColumnClass(int column) { Class dataType = super.getColumnClass(column); dataType = String.class; return dataType; } }; 5 Opcionalmente se puede guardar el modelo en un sorter para poder ordenar las columnas a tu antojo. tk.TableSorter3 sorter = new tk.TableSorter3(myModel); 6 Instanciar la tabla con parametro el sorter y ahí podes utilizar métodos como el Renderer para darle color a las filas. table = new JTable (sorter){ public Component prepareRenderer(TableCellRenderer renderer, int rowIndex, int vColIndex) { Component c = super.prepareRenderer(renderer, rowIndex, vColIndex); if (rowIndex % 2 == 0) { if (!isCellSelected(rowIndex, vColIndex)) { c.setBackground( new Color(247,244,240)); } } else { // if not shaded, match the table's background if (!isCellSelected(rowIndex, vColIndex)) { c.setBackground(getBackground()); } } return c; } }; 7 Setiar parámetros como por Ejemplo: sorter.setTableHeader(table.getTableHeader()); table.setModel(sorter); table.setRowHeight(20); table.setCellSelectionEnabled(true); 8 Definir el tamaño de las columnas TableColumn tcNro = table.getColumnModel().getColumn(colNro); tcNro.setMinWidth(45); tcNro.setMaxWidth(45); TableColumn tcResponsable = table.getColumnModel().getColumn(colResponsable); tcResponsable.setMinWidth(115); tcResponsable.setMaxWidth(115); TableColumn tcNombre = table.getColumnModel().getColumn(colNombre); tcNombre.setPreferredWidth(250); TableColumn tcAlarma = table.getColumnModel().getColumn(colAlarma); tcAlarma.setMinWidth(110); tcAlarma.setMaxWidth(110); TableColumn tcEstado = table.getColumnModel().getColumn(colEstado); tcEstado.setMinWidth(70); tcEstado.setMaxWidth(70); TableColumn tcReclama = table.getColumnModel().getColumn(colReclama); tcReclama.setMinWidth(0); tcReclama.setMaxWidth(0); 9 Guardar la tabla en un scrollpane y definir el tamaño del scrollpane. JScrollPane scrollpane = new JScrollPane (table); table.setPreferredScrollableViewportSize( new Dimension (200,290)); 10 Opcionalmente podes darle una acción a un evento. table.addMouseListener( new MouseAdapter() { public void mouseClicked (MouseEvent e) { Point p = e.getPoint(); int row = table.rowAtPoint( p ); int column = table.columnAtPoint( p ); if (row == -1 || column == -1) { return; } } }); 11 Guardar el scrollpane en un panel a parte y luego guardar ese panel en el panel principal donde vas a mostrar la tabla p_tabla = new JPanel( new BorderLayout()); p_tabla.removeAll(); p_tabla.add(scrollpane, BorderLayout.NORTH); p_tabla.revalidate(); p_tableAgenda.removeAll(); p_tableAgenda.add(p_tabla, BorderLayout.NORTH); p_tableAgenda.setBorder( new BevelBorder(BevelBorder.RAISED )); p_tableAgenda.revalidate(); p_tabla.revalidate(); this.repaint();