Вызов метода из класса загрузки из classForName Java - PullRequest
1 голос
/ 03 сентября 2011

Прежде всего, я использую IBM Java2 SDK, Standard Edition, v 1.2

Чтобы не начинать, у меня есть два Clasess,

Моя главная цель - динамически добавить класс Panel вJTabbed Панель и выполнение метода из загруженного класса.

Давайте начнем:

Текущее меню, в котором будут храниться кнопки, которые будут запускаться для добавления классов.

Основной класс.

public class WMenu extends javax.swing.JFrame {

JTabbedPane1 = new javax.swing.JTabbedPane();
JBtnexec = new javax.swing.JButton();
JBtnundo = new javax.swing.JButton();

...

public static void main(java.lang.String[] args) {
   ...
}

/*When the user Press the btn should execute this method.*/
public void exec(java.awt.event.MouseEvent e) {
    JPanel content = new JPanel();

    /*Name of my class is unknown at this ponit will be controled by Variable for this 
    case i addit manually, */
    Class qc = Class.forName("Wcontrol");  
    content = (JPanel) qc.newInstance();
    JTabbedPane1.addTab("Control", content );
}

/ * при нажатии Отменить btn * /

public void undo(java.util.EventObject newEvent) {
  Class wMenu = Class.forName("Wcontrol");
  Method m = wMenu.getDeclaredMethod("undo", new Class[] {String.class});
  Object c = wMenu.newInstance();   
  m.invoke(c,new Object[] {new String(this.getClass().getName().toString())});
}

}

Class # 2 / * Моя панель, которая является элементом управления Control. Есть несколько полей меток */

public class Wcontrol extends JPanel {
  txt_cve = new javax.swing.JTextField();

 public void undo(String in) {

/*txt_cve.setText("TTT");  Comment first test...*/
System.out.println("Data " + txt_cveind.getText()); 
    JOptionPane.showMessageDialog(this, "Data: " +txt_cveind.getText(), "Info", 1);
 }

} ​​

Теперь, когда я запускаю, фрейм получился идеальным, когда я выполняю загрузку нового класса Panel, также появился префект, отображаемый на панели JTabed, безпроблемы.

Дело в том, что когда я набираю в txt-поле формы класса Wcontrol example = "TTT" и нажимаю отмену btn (основной класс), выполню метод в wControl, потому что он вышел с ShowСообщение, но текстовых данных нет ... пусто ??

Если я добавлю комментарийtText, и я запускаю его снова отображает данные: TTT Enyone будет знать, что я делаю здесь неправильно?или любое предложение

1 Ответ

0 голосов
/ 03 сентября 2011

Я думаю, что программа делает то, что вы кодируете. Он пуст, потому что вы создаете новый экземпляр Wcontrol в undo (), который в свою очередь инициализирует переменную txt_cve пустым текстом. Проверьте мои комментарии ниже:




       public void undo(java.util.EventObject newEvent) {
            Class wMenu = Class.forName("Wcontrol");
            Method m = wMenu.getDeclaredMethod("undo", new Class[] {String.class});

            // NOTE #1: This one create a new instance of the class 
            Object c = wMenu.newInstance();   
            m.invoke(c,new Object[] {new String(this.getClass().getName().toString())});
        }

        public class Wcontrol extends JPanel {
            // Note #2: Reinitialize the txt_cve 
            txt_cve = new javax.swing.JTextField();

            public void undo(String in) {
                // Note #3: This is the interesting part, you change txt_cve and the
                // txt_cveind got affected, so you must have assigned txt_cfe as a reference
                // to txt_cveind somewhere in your code. 
                /*txt_cve.setText("TTT");  Comment first test...*/
                System.out.println("Data " + txt_cveind.getText()); 
                JOptionPane.showMessageDialog(this, "Data: " +txt_cveind.getText(), "Info", 1);
            }
        }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...