Ho la seguente classe :
il problema è che se apro due form di questa classe e premo invio per inviare il messaggio (vedi metodo usedefaultlistenerforokbutton) quello che succede e che il software fa riferimento allo stesso form. ovvero è come se premessi invio sempre sullo stesso formcodice:package jCallRemember.libreria; import java.awt.Dialog; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.util.Observable; import java.util.Observer; import javax.swing.AbstractAction; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import javax.swing.text.DefaultCaret; import javax.swing.text.DefaultEditorKit; import javax.swing.text.Keymap; /** * @author Linux Implementa un Form per scambiare messaggi. La classe estende * JFrame e implementa Observer nel caso arrivino dei messaggi. */ public class FormChat extends javax.swing.JFrame implements Observer { /** * * @return il nickname di chi utilizza il form */ public String getNickName() { return yourNickName; } private class MyObservable extends Observable{ @Override public void setChanged(){ super.setChanged(); } } /** * Costruttore che prende in input i nickname di chi conversa, e il titolo * del form.Inizializza i componenti grafici. * * @param yourNickName chi utilizza il form * @param hisNickName interlocutore remoto * @param title titolo */ public FormChat(String yourNickName, String hisNickName, String title) { this.yourNickName = yourNickName; this.hisNickName = hisNickName; this.setTitle(title); initComponents(); DefaultCaret c = (DefaultCaret) this.textChat.getCaret(); c.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); } /** * Imposta alcune proprietà del form */ public void setup() { this.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE); this.setResizable(false); } /** * Utilizza un OkChatButtonListener come listener di default per il button * del form, istanzia l'oggetto e lo registra al button, fa si inoltre che * prmendo invio nella textarea del messaggio esso viene inviato , mentre * premendo CTRL_ENTER si va nella nuova linea. */ public void useDefaultListenerForOkButton() { if (sender != null) { final OkChatButtonListener listener = new OkChatButtonListener(this.textChat, this.textMsg, this.yourNickName, this.sender); Keymap keyMap = textMsg.getKeymap(); keyMap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.CTRL_DOWN_MASK), new DefaultEditorKit.InsertBreakAction()); keyMap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), new AbstractAction(){ @Override public void actionPerformed(ActionEvent e) { listener.actionPerformed(null); } }); this.okButton.addActionListener(listener); } } /** * Imposta l'osservatore della chat ovvero il thread che si occupa ogni * volta che viene premuto ok di inviare il messaggio. * * @param o un oggetto che implementa Observer, che si occupa di inviare il * messaggio digitato */ public void setSender(Observer o) { this.sender = o; } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jScrollPane3 = new javax.swing.JScrollPane(); jScrollPane4 = new javax.swing.JScrollPane(); textMsg = new javax.swing.JTextArea(); okButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); textChat.setEditable(false); textChat.setColumns(20); textChat.setRows(5); jScrollPane3.setViewportView(textChat); textMsg.setColumns(20); textMsg.setRows(5); jScrollPane4.setViewportView(textMsg); okButton.setText("OK"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 410, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addComponent(jScrollPane4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(okButton))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 232, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addComponent(okButton, javax.swing.GroupLayout.DEFAULT_SIZE, 41, Short.MAX_VALUE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pack(); }// </editor-fold> /** * Permette eventualmente di impostare un ActionListener diverso per il * button della chat * * @param action */ public void setOkButtonListener(ActionListener action) { this.okButton.addActionListener(action); } /** * * @return la textarea dove vengono visualizzati i messaggi scritti */ public JTextArea getTextChat() { return textChat; } /** * * @return la textarea dove si scrive il mess */ public JTextArea getTextMsg() { return textMsg; } /** * * @return il nickname dell'interlocutore remoto */ public String gethisNickName() { return this.hisNickName; } /** * Verifica l'argomento passato sia un istanza di string e aggiunge il * messaggio ricevuto alla textarea del form. Facendo pero svolgere tale * lavoro all'edt. * * @param o * @param arg */ @Override public void update(Observable o, Object arg) { if (arg instanceof String) { final String mess = arg.toString(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { synchronized (textChat) { textChat.append((String) mess); } if (!FormChat.this.isVisible()) { setVisible(true); } } }); } } private final String yourNickName; private final String hisNickName; private Observer sender; // Variables declaration - do not modify private javax.swing.JScrollPane jScrollPane3; private javax.swing.JScrollPane jScrollPane4; private javax.swing.JButton okButton; private final javax.swing.JTextArea textChat = new javax.swing.JTextArea(); private javax.swing.JTextArea textMsg; // End of variables declaration }

Rispondi quotando