Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ayuda con swing, print y clases

Hola, llevo unos días leyendo este foro, y me he decidido registrarme, verán, estoy haciendo como proyecto personal un sistema de facturación en java, tras seguir varios cursos y estudiar. Lo estoy desarrollando con eclipse y uso la librería swing sin ningún plugin para construir los distintos menús.

Quiero estructurar el programa para que use varias clases, para separar las distintas funciones del programa en varios archivos y no tenerlo todo agrupado en uno solo, pero a la hora de unir distintas funciones de swing en la main, me aparecen como ventanas nuevas y no como parte del programa, no sé si me explico, si yo llamo a AltaCliente, y en esa clase tengo un formulario para el alta de un cliente, se me ejecuta como un programa nuevo y no se integra en el mismo.

Me gustaría saber si hay alguna forma relativamente fácil para hacerlo, o cuál sería la propicia, y me gustaría que alguien me explicara cómo dar propiedades a ciertas partes del programa para luego poder imprimirlas, he intentado buscar, pero son explicaciones demasiado extensas y sólo he conseguido imprimir toda la pantalla tal y como se ve.

Espero que no sea mucha molestia, no pido que me hagan las cosas, aseguro que he buscado y he leído bastante, pero no consigo aclararme :(

junio 6, 2013 | Registered Commenterjdeses

Sin ver el código que estás usando, y cómo creas los componentes de Swing, no es posible saber qué te está pasando.
De todos modos, para crear aplicaciones de escritorio con Swing, te recomendaría que usases NetBeans.

junio 6, 2013 | Registered Commenterchoces

Ok, ante todo, muchas gracias por la rápida respuesta, aquí muestro más o menos como estoy haciéndolo.

public class ProgramaGestion extends JFrame implements ActionListener,Printable{

private static final long serialVersionUID = 1L;


// variables JLabel y menus
private JLabel etiqueta1,resolucion;
private JMenu menu1;
private JMenuBar barra;
private JMenuItem mi1, mi2, mi3;
static Dimension res = Toolkit.getDefaultToolkit().getScreenSize();

Creo las variables y ahora voy creando y colocando los jlabels por ejemplo así:

public ProgramaGestion(){

// JLabel
setLayout(null);
etiqueta1 = new JLabel("Programa gestión 0.1 BETA");
etiqueta1.setForeground(Color.orange);
etiqueta1.setFont(new Font("Tahoma",0,36));
etiqueta1.setBounds(res.width/2-250, 0, 500, 50);
etiqueta1.setVisible(true);
add(etiqueta1);

Y los menús por ejemplo así:

// JMenu **
// Barra menu
barra = new JMenuBar();
setJMenuBar(barra);

// Clientes
menu1 = new JMenu("Clientes");
barra.add(menu1);

// Nuevo
mi1 = new JMenuItem("Nuevo");
mi1.addActionListener(this);
menu1.add(mi1);

// Modificar
mi2 = new JMenuItem("Modificar");
mi2.addActionListener(this);
menu1.add(mi2);

Y ahora los actionsperformed de los elementos del menu asi:

public void actionPerformed(ActionEvent e) {
Container f=this.getContentPane();
if (e.getSource()==mi1){
etiqueta1.setVisible(false);
}
if (e.getSource()==mi2){
try {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
job.printDialog();
job.print();
} catch (PrinterException ex) {
Logger.getLogger(ProgramaGestion.class.getName()).log(Level.SEVERE, null, ex);
}

En el main tengo:

public static void main(String[] args) {
ProgramaGestion ventana1 = new ProgramaGestion();
ventana1.setBounds(0,0,res.width,res.height);
System.out.println(res.width/2);
ventana1.setResizable(false);
ventana1.setUndecorated(true);
ventana1.setVisible(true);

}

y luego tengo para poder imprimir:
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {

if (pageIndex > 0) {
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D)graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

printAll(graphics);

return PAGE_EXISTS;

}
}

Lo que no sé como hacer, es crear nuevas clases con nuevos elementos de swing, y como hacer áreas imprimibles.

junio 6, 2013 | Registered Commenterjdeses

La clase que contiene el main, solo debería tener ese método main, y lo más simple posible.

public class Inicio{

public static void main(String[] args) {
ProgramaGestion ventana1 = new ProgramaGestion();
}
}

El resto de las clases, en archivos separados, organizados por packages.
Los objetos de esas clases los vas creando según sea apropiado.

Es mejor que inicialices las propiedades del JFrame principal dentro de su clase.

junio 6, 2013 | Registered Commenterchoces

¿Y cómo podría agregar desde otra clase a ventana1 más elementos swing?

junio 6, 2013 | Registered Commenterjdeses

Y como podría darle a cada elemento la propiedad de ser impreso? para que una vez que saque una factura, no se vean menús ni otras cosas no deseadas

junio 6, 2013 | Registered Commenterjdeses

Buenas,

Los elementos se los anades a tu clase que contenga el jframe/panel correspondiente.

Para "imprimir" los datos deberias utilizar algun tipo de herramienta de informes, como Jasper Reports o Birt. Una vez disenado, le tendrias que pasar los datos de tu formulario swing para que genere el documento a imprimir.

Un saludo

junio 7, 2013 | Unregistered CommenterUnoPorAhi

Muchas gracias, probaré eso :)

junio 7, 2013 | Unregistered CommenterJdeses