// // java1330.java // Copyright (c) 1998, Agustin Froufe // Todos los derechos reservados. // // No se asume ninguna responsabilidad por el uso o alteracion de este // software. Este software se proporciona COMO ES, sin garantia de ningun // tipo de su funcionamiento y en ningun caso sera el autor responsable de // daños o perjuicios que se deriven del mal uso del software, aun cuando // este haya sido notificado de la posibilidad de dicho daño. // // Compilador: javac 1.1.6 // Autor: Agustin Froufe // Creacion: 20-Jul-1998 15:22:40 // //-------------------------------------------------------------------------- // Esta informacion no es necesariamente definitiva y esta sujeta a cambios // que pueden ser incorporados en cualquier momento, sin avisar. //-------------------------------------------------------------------------- /** * El propósito de este programa es mostrar cómo se imprimen componentes * desde el AWT */ import java.awt.*; import java.awt.event.*; public class java1330 { public static void main( String args[] ) { // Se instancia un objeto de la clase Interfaz Gráfico IHM ihm = new IHM(); } } class IHM { // El contenedor miFrame y todos los componenete que contiene, serán // impresos o enviados a un fichero de impresora cuando se pulse el // botón con el rótulo "Imprimir Frame" Frame miFrame = new Frame( "Tutorial de Java, AWT" ); // El contenedor panelAImprimir y todos los componentes que contiene, // serán impresos o enviados a un fichero de impresora cuando se // pulse el botón con el rótulo "Imprimir Panel" Panel panelAImprimir = null; // Referencias a los dos paneles seleccionables Panel panel0; Panel panel1; public IHM() { // Botón para imprimir el Panel Button botonImpPanel = new Button( "Imprimir Panel" ); botonImpPanel.addActionListener( new PrintActionListener() ); miFrame.add( botonImpPanel,"North" ); Button botonImpFrame = new Button( "Imprimir Frame" ); botonImpFrame.addActionListener( new PrintActionListener() ); miFrame.add( botonImpFrame,"South" ); // Los botones siguientes son los que se utilizan para seleccionar // entre los dos paneles el que se va a visualizar Button botonPanel0 = new Button( "Selecciona Panel 0" ); botonPanel0.addActionListener( new Panel0Listener() ); miFrame.add( botonPanel0,"West" ); Button botonPanel1 = new Button( "Selecciona Panel 1" ); botonPanel1.addActionListener( new Panel1Listener() ); miFrame.add( botonPanel1,"East" ); // Aquí se construyen los paneles que luego se asignarán a la // referencia panelAImprimir al hacer una selección. La rutina // de impresión hará que el contenedor referenciado por // panelAImprimir y todos sus componentes sean impresos panel0 = new Panel(); Label labPanel0 = new Label( "Panel 0" ); panel0.add( labPanel0 ); TextField textoPanel0 = new TextField( "Texto" ); panel0.add( textoPanel0 ); panel0.add( new Button( "Boton" ) ); panel0.setBackground( Color.yellow ); panel1 = new Panel(); Label labPanel1 = new Label( "Panel 1" ); panel1.add( labPanel1 ); TextField textoPanel1 = new TextField( "Texto" ); panel1.add( textoPanel1 ); panel1.add(new Button( "Un Boton" ) ); panel1.add(new Button( "Otro Boton" ) ); panel1.setBackground( Color.red ); // Es necesaria una referencia válida en panelAImprimir para // evitar la presencia de una excepción por puntero nulo // al realizar la selección e intentar eliminar la referencia // anterior panelAImprimir = panel0; miFrame.setSize( 340,200 ); miFrame.setVisible( true ); // Esta es una clase anidada anónima que se utiliza para // concluir la ejecución del programa cuando el usuario // decide cerrar el Frame miFrame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent evt ) { System.exit( 0 ); } } ); } // Esta es una clase anidada utilizada para imprimir el // contenedor referenciado por panelAImprimir o el Frame // referenciado por miFrame class PrintActionListener implements ActionListener { public void actionPerformed( ActionEvent evt ) { // Coge un objeto PrintJob. Esto hace que aparezca el // diálogo estándar de impresión, que si se cierra sin // imprimir devolverá un nulo PrintJob miPrintJob = miFrame.getToolkit(). getPrintJob( miFrame,"Tutorial de Java, AWT",null ); if( miPrintJob != null ) { // Coge el objeto gráfico que va a imprimir Graphics graficoImpresion = miPrintJob.getGraphics(); if( graficoImpresion != null ) { // Invoca la método printAll() del objeto Panel, o del // objeto Frame para hacer que los componentes del // que sea se dibujen sobre el objeto gráfico y se // pinten sobbre el papel de la impresora if( evt.getActionCommand().equals( "Imprimir Panel" ) ) panelAImprimir.printAll( graficoImpresion ); else miFrame.printAll( graficoImpresion ); // Hacemos que se libere el papel de la impresora y los // recursos del sistema que estaba utilizando el // objeto gráfico graficoImpresion.dispose(); } else System.out.println( "No se puede imprimir el objeto" ); // Se concluye la impresión y se realiza la limpieza // necesaria miPrintJob.end(); } else System.out.println( "Impresion cancelada" ); } } // Esta es una clase anidada que permite seleccionar e // imprimir el panel0 class Panel0Listener implements ActionListener { public void actionPerformed( ActionEvent evt ) { miFrame.remove( panelAImprimir ); panelAImprimir = panel0; miFrame.add( panelAImprimir,"Center" ); miFrame.invalidate(); // Fuerza el redibujado // miFrame.repaint(); // El método repaint() se puede utilizar en lugar de // setVisible(), en el caso de que setVisible() haya // sido invocado previamente sobre el Frame que // contiene este Panel en algún sitio previo del // programa. No sé qué es lo más eficiente, pero // en el caso de que repaint() sea más eficiente, // una posibilidad sería hacer un bucle a través de // todos los pobibles panels al comienzo del // programa, invocando al método setVisible( true ) // para cada uno de ellos y así poder utilizar luego // el método repaint() en lugar de setVisible() miFrame.setVisible( true ); } } // Esta es una clase anidada que permite seleccionar e // imprimir el panel1 class Panel1Listener implements ActionListener { public void actionPerformed( ActionEvent evt ) { miFrame.remove( panelAImprimir ); panelAImprimir = panel1; miFrame.add( panelAImprimir,"Center" ); miFrame.invalidate(); // Fuerza el redibujado // miFrame.repaint(); miFrame.setVisible( true ); } } } //------------------------------------------ Final del fichero java1330.java