Allora... Premesso che, se chiedo aiuto qui, sto proprio alla frutta dato che di solito bene o male riesco a cavarmela in tutti i muri che il Java mi mette davanti per capirne le varie metodologie. Questa volta il problema è NetBeans... Vi spiego, cercherò di essere più dettagliato possibile, se dimentico di precisare qualcosa fatemelo notare. >.<
Di solito per quanto riguarda i vari meccanismi profondi del codice vado a scrivere a manina tutte le varie operazioni che servono, poi NetBeans aiuta un pochino riguardo l'interfaccia grafica e il codice per creare l'interfaccia non lo sto molto a guardare... Conosco le cose buone per l'utilizzo tipo i vari setText, setVisible, setBackground e così via.
Da questo errore:
The component cannot be instantiated. Please make sure it is a JavaBeans component.
Che ho fatto per arrivare al problema, vi spiego.
1) Ho creato il meccanismo di fondo per criptare e decriptare stringhe. Ovviamente testo per vedere se funziona tutto come dovrebbe andando a fare vari test con System.out vari ed eventuali.
2) Per sfizio volevo implementare l'interfaccia in un JTabbed Pane all'interno di un altro programmino più ampio (che chiamiamo ToolsJFrame per intenderci). Il JPanel si trova in un pacchetto diverso ma nello stesso progetto rispetto al ToolsJFrame che lo deve avere.
3) Allora creo il JPanel che verrà contenuto nel JTabbedPane del ToolsJFrame principale, inserisco il JPanel cliccando col destro sul JTabbedPane e su Add From Palette-> Beans -> Choose Bean.
4) Il JPanel del criptatore quindi si vede nel JTabbedPane del programma ToolsJFrame più grande.
5) Lavoro sul JPanel Criptatore in modo che collabori con il cuore del programma e tutti i suoi metodi (Cripta, Decripta, Pesca Criptaggio, ecc ecc..). Da tenere presente che il motore interno del programmino di criptaggio lancia un'eccezione FileNotFoundException.
5b) Aggiungo che dato che non mi faceva incapsulare con NetBeans l'import del JPanel nel ToolsJFrame, sono andato a modificare manualmente (con Notepad++ per intenderci) la creazione dell'oggetto con il blocco try e catch (dato che internamente il JPanel lanciava nel costruttore una FileNotFoundException).
6) vado a vedere tempo dopo in cui il JPanel è quasi pronto e noto con stupore che il ToolsJFrame principale da errore (nonostante io avessi più volte mandato in run il ToolsJFrame per provare il JPanel), non mi segna la riga di errore però, nonostante andando a guardare nel sorgente, dando errore su una parentesi graffa ma nel codice auto generato da NetBeans (il JPanel che volevo importare era però corretto e non dava errori). quindi succede che NetBeans mi chieda se voglio o Allow Edit oppure View Only (non mi ricordo con precisione il motivo).
7) Da quel punto in poi va tutto a scatafascio. Il ToolsJFrame perde il collegamento con il JPanel che avevo inserito. Da allora quando tento di fare l'import del JPanel dentro al ToolsJFrame mi da questo errore:
The component cannot be instantiated. Please make sure it is a JavaBeans component.
8) Panico. Riprovo varie volte, cerco su internet i motivi di questo sfacelo e non scopro niente che mi possa aiutare seriamente, creo prima un JavaBean per vedere se lo implementa che però non ha un'interfaccia grafica e quindi non so come usarlo D: ed ho letto che il JavaBean sta sotto i component quindi implementando un JPanel dovrei implementare anche quelle funzionalità di default.
9) Creo un nuovo JPanel vuoto e c'inserisco un solo pulsante per vedere se funziona ancora almeno così. Quindi importo il JPanel appena creato come ho fatto prima (Add From Palette-> Beans -> Choose Bean) ma questa volta pure che si crea il JPanel dentro al JTabbed Pane del ToolsJFrame non si visualizza il semplice JButton interno creato di prova...
10) Provo facendo anche vari Clean e Build tra un passaggio e l'altro perché da quanto ho visto a volte dava problemi di questo tipo ma anche così niente.
11) Provo a togliere qualsiasi parametro sia esterno ai metodi che interno al costruttore, tolgo il throw dell'eccezione perché da errore d'incapsulamento nell'ToolsJFrame per vedere se così va ma niente, da lo stesso errore cannot instantiated.
Se avete qualche guidina che spieghi quali sono i parametri must di un JavaBean (se ne ho toppato qualcuno, anche se ho guardato su internet per scovare quale poteva essere) o comunque il motivo di tanta distruzione ad un programma su cui lavoro da 2 settimane (parlando del motore interno, non dell'interfaccia, ovviamente) vi sarei grato.
Vi posto lo scheletro, le componenti usate e il costruttore del JPanel famigerato (quello che sto tentando di transformare in JavaBean):
P.S.: Non l'ho inserito tutto lo scheletro perché sforavo i 13000 caratteri. Se vi serve altro basta farmelo sapere.
Grazie infinite. Sia che abbiate la soluzione sia che almeno proviate ad aiutarmi.codice:package [package].[package].ecc; import java.awt.Color; import java.io.FileNotFoundException; import javax.swing.JOptionPane; /** * @author User */ public class ImmagazzinatoreGui extends javax.swing.JPanel { public String fileName = "fileCriptato.xml"; public String DIRECTORY = ""; /** Creo l'oggetto del motore interno **/ Immagazzinatore immagazzina = new Immagazzinatore(file); /** Ho provato sia creando l'oggetto Immagazzinatore qua che direttamente dentro ai metodi incapsulandolo dentro try e catch. immagazzina lancia un'eccezione FileNotFoundException **/ /**...eccetera...**/ /** Creates new form ImmagazzinatoreGui */ /** ho provato anche lasciando il costruttore vuoto (senza throws e senza parametri) ma non funzionava lo stesso, dando errore cannot instantiated **/ public ImmagazzinatoreGui() throws FileNotFoundException { initComponents(); controllaPopolamento(); nascondiAll(); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { /** non entrava nel Thread, sono i componenti generati di Default da NetBeans se vi servono ditemelo che li aggiungo **/ ); }// </editor-fold> private void copiaPasswordButtonActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void newPassButtonActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void inChiaroToggleButtonMouseClicked(java.awt.event.MouseEvent evt) { } private void copiaPasswordButtonMousePressed(java.awt.event.MouseEvent evt) { } private void controllaPopolamento() throws FileNotFoundException { } private void nascondiAll() { } // Variables declaration - do not modify private javax.swing.JButton accediMagazzinoButton; private javax.swing.JButton cancellaPasswordButton; private javax.swing.JButton copiaPasswordButton; /** eccetera **/ // End of variables declaration /** vari get e set generati con NetBeans **/

Rispondi quotando


