-2

こんにちは、stackoverflow 開発者 私は 2 つのメニューを持つスイングでフォームを設計する必要があります。メニューをクリックすると、jinternal フレームが追加されます。jinternalframe のボタンをクリックした後、jinternalframe を削除し、新しいコントロールを jframe form に追加する必要があります。

     import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.event.*;

 class MainMenu extends JFrame implements ActionListener
   {
    JMenuBar mb;
    Menu field,test;
   MainMenu()
  {
  Container cp=this.getContentPane();
   mb= new JMenuBar();
  field1= new JMenu("field1");
  test=new JMenu("test");
  mb.add(field1);
  mb.add(test);

  setJMenuBar(mb);
  field1.addActionListener(this);
 test.addActionListener(this);


}

 public void actionPerformed(ActionEvent ae)
  {
    if(ae.getActionCommand().equals("field1");
   {
     jinternalframe1 frm= new jinternalframe();
     cp.add(frm);
      frm.setBounds(0,0,600,600);
   }

    }

   public static void main(String args[])
   {

   MainMenu frm = new MainMenu();
    frm.setSize(1000,1000);
   frm.setVisible(true);
   }


 }

public class jinternalframe1 extends JInternalFrame implements ActionListener
{

 JButton jb1,jb2;

 jinternalframe1()
{
jb1= new JButton("1");
jb2=new JButton("2");
 add(jb1);
 add(jb2);
 jb1.addActionListener(this);
jb2.addActionListener(this);


 }

 public void actionPerformed(ActionEvent ae)
  {
  if(ae.getActionCommand().equals("1"))
   {
     JButton nn= new JButton("back");
     MainMenu frm= new MainMenu();
    frm.cp.add(nn);
    //this is creating new Form but i want to add the new button control instead of add        //jinternal frame

    }
  }

}

4

1 に答える 1

1

メイン フォームのインスタンスを JInternalFrame に渡します

jinternalframe1 frm= new jinternalframe(this); 

jinternalframe1 クラスで MainMenu のオブジェクトを宣言して、メイン クラス オブジェクトを指すようにします。

MainMenu myParent;

MainMenu インスタンスを受け入れるように jinternalframe1 コンストラクターを変更します。

 jinternalframe1(MainMenu parent){

   myParent = parent;

   //rest of your code
}

そして、actionPerformed で新しいボタンを myParent インスタンスに追加します。

if(ae.getActionCommand().equals("1")){
myParent.add(new JButton("back"));
}

しかし、これは良い習慣ではありません。そして、trashgod が言ったように、あなたのコードはsscce ではありません。

于 2012-10-05T12:39:29.287 に答える