2015-04-16 5 views
0

и у меня есть следующая проблема. Я новичок в java, и я пытаюсь отправить переменную, которая является user_id, от JInternalFrame до JFrame.java - метод и передающая переменная от jInternalFrame до jFrame

Я не могу использовать конструктор, поскольку JFrame основная программа активируется при запуске и содержащий jDesktoPane

так я пытался использовать методы, однако, не может это сделать (я отправил два метода, оба из которых я пытался, но не получилось)

Метод а)

код в JFrame (Main_window)

public javax.swing.JTextField getID() { 
    return jTextField_id; 
} 

public void setID(javax.swing.JTextField ID) 
{ 
jTextField_id = ID; 
} 

код в JInternalFrame

Main_window send = new Main_window(); 
send.getID().setText("123"); 

Метод Б)

код в JFrame (Main_window) USER_ID является переменной подъезд в любом месте JFrame

public void setID(String ID) 
{ 
USER_ID = ID; 
} 

код в JInternalFrame

Main_window send = new Main_window(); 
send.setID("123"); 

как метод ничего не меняют, но не имеют ошибок при компиляции

если есть другой способ сделать это пожалуйста скажите мне :)

жаль моего языка и грамматики. , если это поможет я использовать ECLIPSE составителя

этот код работал для меня, ти за помощью

public void set_ID(String ID) 
{ 
    Test_JF mainWindow = (Test_JF) this.getTopLevelAncestor();; 
    mainWindow.setID(ID); 
} 

активированного set_ID ("1234");

+1

'new Main_Window(); ... 'выглядит подозрительно, как создание нового экземпляра, вместо вызова' setID() 'в фактическом главном окне. – kiheru

+0

Да, я знаю, но мне нужно отправить идентификатор, который находится в jinternalframe, поэтому я должен использовать его в этом фрейме, что jinternalframe является страницей регистрации. –

+0

Как сказал kiheru, вы устанавливаете идентификатор в новом экземпляре. Возможные решения заключались бы в объявлении id как статическом или передаче ссылки JFrame в конструкторе JInternalFrame –

ответ

0

Попробуйте это в своем классе JInternalFrame:

JFrame mainWindow = (JFrame)this.getTopLevelAncestor(); 
mainWindow.setID("123"); 
+0

Я получил ошибку Исключение в потоке «AWT-EventQueue-0» java.lang.NullPointerException –

+0

Это не дает много информации. Вы отлаживали это? Какая переменная была нулевой? Вам нужно будет показать весь код, чтобы кто-нибудь мог сказать, где ошибка. –

+0

моя программа немного большая, за 2 минуты я делаю небольшой тестовый эквивалент и помещаю его здесь –

0

ИТАК здесь уменьшенная версия моей программы "Test_JF" является основным JFrame и "Test_JIF" является JInternalFrame

здесь TestJF

public class Test_JF extends JFrame { 

private JPanel contentPane; 
private JTextField user_id; 

String USER_ID; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Test_JF frame = new Test_JF(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

public Test_JF() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 750, 500); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    user_id = new JTextField(); 
    user_id.setBounds(338, 11, 86, 20); 
    contentPane.add(user_id); 
    user_id.setColumns(10); 

    JButton button_user_id = new JButton("fill user id"); 
    button_user_id.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      user_id.setText(USER_ID); 
     } 
    }); 
    button_user_id.setBounds(239, 10, 89, 23); 
    contentPane.add(button_user_id); 

    JDesktopPane desktopPane = new JDesktopPane(); 
    desktopPane.setBounds(10, 56, 714, 395); 
    contentPane.add(desktopPane); 

    addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowOpened(WindowEvent arg0) { 
      Test_JIF Open = new Test_JIF(); 
      desktopPane.add(Open); 
      Open.show(); 
     } 
    }); 

} 

public void setID(String ID) 
{ 
USER_ID = ID; 
}} 

здесь TestJIF

public class Test_JIF extends JInternalFrame { 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Test_JIF frame = new Test_JIF(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 


public Test_JIF() { 
    Test_JF mainWindow = (Test_JF)this.getTopLevelAncestor(); 
    setBounds(100, 100, 328, 199); 
    getContentPane().setLayout(null); 

    JButton button_send = new JButton("New button"); 
    button_send.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      mainWindow.setID("123"); 
     } 
    }); 
    button_send.setBounds(111, 73, 89, 23); 
    getContentPane().add(button_send); 

}} 

i ящик импорта здесь (в сети), поэтому он будет чистым

+0

1. Это должно быть редактирование вопроса, а не ответ. 2. На этапе, когда вы вызываете 'getTopLevelAncestor()' внутреннее окно еще не имеет. Самый простой способ - передать кадр верхнего уровня в качестве параметра конструктора, поэтому он будет доступен для использования в конструкторе 'Test_JIF'. 3. «Неверные» макеты - плохая идея и не приводят к проблемам. Вместо этого используйте диспетчеры макетов, так как качели предназначены для использования. – kiheru

+0

1. Извините за то, что 2.it отлично звучит, но как я могу получить параметр кадра? и как проходит, как? –

+0

nvm с помощью всех здесь, я сделал метод, который может отправлять данные :) Я разместил его в главном сообщении –

Смежные вопросы