malocchio
08-11-2009, 16:13
Allora la situazione è questa:
ho progettato un JPanel tramite il designer grafico di NetBeans e questa è l'anteprima
http://img69.imageshack.us/img69/1664/shotdices.jpg
Ora io vorrei trasformare questo oggetto JPanel in un JDialog, in modo da poter essere istanziato e visualizzato direttamente senza fare un add().
Ho provato a modificare il codice generato da NetBeans da così a così
public class StartForm extends javax.swing.JPanel
public class StartForm extends javax.swing.JDialog
ma mi dà il seguente errore in compilazione (ho ovviamente modificato il codice che utilizza la classe in modo da essere corretto. Sembra che l'errore sia generato dal GroupLayout in fase di visualizzazione (setVisible(true))
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: GroupLayout can only be used with one Container at a time
at javax.swing.GroupLayout.checkParent(GroupLayout.java:1095) <<<<<<<<
at javax.swing.GroupLayout.invalidateLayout(GroupLayout.java:987)
at java.awt.Container.invalidate(Container.java:1455)
at java.awt.Component.addNotify(Component.java:6432)
at java.awt.Container.addNotify(Container.java:2585)
at javax.swing.JComponent.addNotify(JComponent.java:4683)
at java.awt.Container.addNotify(Container.java:2592)
at javax.swing.JComponent.addNotify(JComponent.java:4683)
at java.awt.Container.addNotify(Container.java:2592)
at javax.swing.JComponent.addNotify(JComponent.java:4683)
at javax.swing.JRootPane.addNotify(JRootPane.java:735)
at java.awt.Container.addNotify(Container.java:2592)
at java.awt.Window.addNotify(Window.java:638)
at java.awt.Dialog.addNotify(Dialog.java:747)
at java.awt.Dialog.conditionalShow(Dialog.java:891)
at java.awt.Dialog.show(Dialog.java:1034)
at java.awt.Component.show(Component.java:1422)
at java.awt.Component.setVisible(Component.java:1375)
at java.awt.Window.setVisible(Window.java:806)
at java.awt.Dialog.setVisible(Dialog.java:985) <<<<<<<
at backtris.StartForm.<init>(StartForm.java:22)
at backtris.TrisApplication.showStarterForm(TrisApplication.java:33)
at backtris.TrisApplication.<init>(TrisApplication.java:22)
at backtris.TrisWindow.<init>(TrisWindow.java:12)
at backtris.TrisWindow$1.run(TrisWindow.java:23)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
L'errore mi viene visualizzato in console 2 volte e non visualizza niente (la JVM però non termina).
Non ho voglia di scoprire cosa c'è che non funziona e mi piacerebbe scrivere a mano il codice del pannello.
Però non saprei come fare. Prenderò ovviamente spunto dal codice auto-generato, ma non userò il GroupLayout.
Quell'immagine dei dadi, nella mia idea, deve stare al centro della finestra o, meglio, al centro del riquadro ideale formato dai bordi della finestra e dal bordo inferiore della label "Click to...".
Come posso fare?
L'immagine è visualizzata, nel codice auto-generato, tramite un JButton avente un'icona coprente. Questo il codice:
jButton1 = new javax.swing.JButton();
...
jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/backtris/dice.jpg")));
ho progettato un JPanel tramite il designer grafico di NetBeans e questa è l'anteprima
http://img69.imageshack.us/img69/1664/shotdices.jpg
Ora io vorrei trasformare questo oggetto JPanel in un JDialog, in modo da poter essere istanziato e visualizzato direttamente senza fare un add().
Ho provato a modificare il codice generato da NetBeans da così a così
public class StartForm extends javax.swing.JPanel
public class StartForm extends javax.swing.JDialog
ma mi dà il seguente errore in compilazione (ho ovviamente modificato il codice che utilizza la classe in modo da essere corretto. Sembra che l'errore sia generato dal GroupLayout in fase di visualizzazione (setVisible(true))
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: GroupLayout can only be used with one Container at a time
at javax.swing.GroupLayout.checkParent(GroupLayout.java:1095) <<<<<<<<
at javax.swing.GroupLayout.invalidateLayout(GroupLayout.java:987)
at java.awt.Container.invalidate(Container.java:1455)
at java.awt.Component.addNotify(Component.java:6432)
at java.awt.Container.addNotify(Container.java:2585)
at javax.swing.JComponent.addNotify(JComponent.java:4683)
at java.awt.Container.addNotify(Container.java:2592)
at javax.swing.JComponent.addNotify(JComponent.java:4683)
at java.awt.Container.addNotify(Container.java:2592)
at javax.swing.JComponent.addNotify(JComponent.java:4683)
at javax.swing.JRootPane.addNotify(JRootPane.java:735)
at java.awt.Container.addNotify(Container.java:2592)
at java.awt.Window.addNotify(Window.java:638)
at java.awt.Dialog.addNotify(Dialog.java:747)
at java.awt.Dialog.conditionalShow(Dialog.java:891)
at java.awt.Dialog.show(Dialog.java:1034)
at java.awt.Component.show(Component.java:1422)
at java.awt.Component.setVisible(Component.java:1375)
at java.awt.Window.setVisible(Window.java:806)
at java.awt.Dialog.setVisible(Dialog.java:985) <<<<<<<
at backtris.StartForm.<init>(StartForm.java:22)
at backtris.TrisApplication.showStarterForm(TrisApplication.java:33)
at backtris.TrisApplication.<init>(TrisApplication.java:22)
at backtris.TrisWindow.<init>(TrisWindow.java:12)
at backtris.TrisWindow$1.run(TrisWindow.java:23)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
L'errore mi viene visualizzato in console 2 volte e non visualizza niente (la JVM però non termina).
Non ho voglia di scoprire cosa c'è che non funziona e mi piacerebbe scrivere a mano il codice del pannello.
Però non saprei come fare. Prenderò ovviamente spunto dal codice auto-generato, ma non userò il GroupLayout.
Quell'immagine dei dadi, nella mia idea, deve stare al centro della finestra o, meglio, al centro del riquadro ideale formato dai bordi della finestra e dal bordo inferiore della label "Click to...".
Come posso fare?
L'immagine è visualizzata, nel codice auto-generato, tramite un JButton avente un'icona coprente. Questo il codice:
jButton1 = new javax.swing.JButton();
...
jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/backtris/dice.jpg")));