Foro sobre Java SE > Ayuda con swing, print y clases
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.
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.
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.
¿Y cómo podría agregar desde otra clase a ventana1 más elementos swing?
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
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
Muchas gracias, probaré eso :)
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 :(