Java добавление jbutton из Jframe1 в Jframe2 - PullRequest
0 голосов
/ 04 марта 2012

Я хава jframe1 и jframe2, который расширяет javax.swing.JFrame в netbeans. (В том же проекте).

jframe2 имеет jpanel1.Каков разумный способ обмена данными между двумя формами?

Ответы [ 3 ]

2 голосов
/ 04 марта 2012

Я предполагаю, что NetBeans создал панель с именем jPanel1 внутри вашего Jframe2. Причина, по которой вы получаете сообщение об ошибке, заключается в том, что NetBeans по умолчанию jPanel1 имеет доступ к частному и не виден из внешнего мира. Вам следует изменить его доступность на public, если вы хотите это сделать.

Более элегантный способ: вы можете добавить метод к JFrame2, чтобы позаботиться о добавлении кнопки к ее визуальному виду. Что-то вроде этого:

public class JFrame2 extends JFrame{
  //... 
  public void addButtong(JButton button){
     jPanel1.add(bt);
  }
}

и используйте его так:

JButton bt = new javax.swing.JButton();
bt.setText("from jframe1 button1");
Jframe2.addButtong(bt);
2 голосов
/ 04 марта 2012

У вас должна быть ссылка на фактический экземпляр jframe2.Если вы этого не понимаете, вам пока не следует создавать графический интерфейс, но вы должны начать изучать, как использовать объектно-ориентированное программирование (ООП).Если вы действительно это понимаете, вы должны знать, что модификатор доступа по умолчанию для компонентов графического интерфейса в NetBeans является закрытым, что может привести к ошибке, в которой говорится, что поле jPanel1 не отображается.

1 голос
/ 04 марта 2012

Хотя JFrame2 может содержать JPanel, у него нет поля или , переменная называется jPanel1, поэтому вы не можетеполучить доступ к этому, как это.(Внутренне он хранит коллекцию компонентов, и вы можете получить к ним доступ через вызовы методов, но не по «имени», и здесь это не подходит).

Вам необходимо сохранитьссылка на ваш JPanel перед добавлением его в JFrame:

JFrame frame1 = new JFrame();
JPanel panel1 = new JPanel();
frame1.add(panel1);

JButton bt = new javax.swing.JButton();
bt.setText("from jframe1 button1");
panel1.add(bt);
...