dポイントプレゼントキャンペーン実施中!

質問の内容を書いてください こんにちは、宜しくお願いします。

 親ウインドウから子ウインドウを開き、子ウインドウから親ウインドウに情報を
渡してやりたいと考えています。

 以下のようなプログラムを書いたのですが、
親ウインドウから子ウインドウを開こうとして、「new DialogTest(this)」で
「this」を引数に取とろうとすると
「コンストラクターのDialogTest(new ActionListener(){}・・・)は未定義です」
とのエラーがでます。

この意味が分かりません、どのように対処すればよいのでしょうか。
宜しくお願いします。
==========================================================================
//Parent_Window
public class FrameTest extends JFrame
{
//Constructor
public FrameTest()
{
setTitle( "TEST" ) ;
setBounds( 20 , 50 , 900 , 1200 ) ;
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ) ;

JMenuBar menubar = new JMenuBar() ;

JMenu menu1 = new JMenu( "File" ) ;
menubar.add( menu1 ) ;

JMenuItem menuitem1_1 = new JMenuItem( "Open" ) ;
menuitem1_1.addActionListener
(
new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
new DialogTest( /*this*/ ) ;
}
}
) ;

menu1.add( menuitem1_1 ) ;
setJMenuBar( menubar ) ;
}

public static void main( String[] args )
{
FrameTest ft = new FrameTest( ) ;

JPanel jp = new JPanel() ;

ft.add( jp ) ;
ft.setLocation( 150 , 200 ) ;
ft.setVisible( true ) ;
}
}

========================================================

//Child_Window
public class DialogTest extends JDialog
{
public DialogTest( /*Frame parent*/ /*, If_Notifier n*/ )
{
// super( /*parent ,*/ true ) ;
setSize( 300 , 350 ) ;
addWindowListener( new DialogWindowListener() ) ;
setLocation( 400 , 250 ) ;
setLayout( new GridLayout( 1 , 2 ) ) ;
Panel p1 = new Panel();
Panel p2 = new Panel();
Panel p1_1 = new Panel();
Panel p1_2 = new Panel();
p1.setLayout( new GridLayout( 2 , 1 ) ) ;
p1_1.setBackground( Color.RED ) ;
p1_2.setBackground( Color.BLUE ) ;
p2.setBackground( Color.GREEN ) ;
p1.add( p1_1 ) ;
p1.add( p1_2 ) ;
add( p1 ) ;
add( p2 ) ;
setVisible( true ) ;
}

class DialogWindowListener extends WindowAdapter
{
public void windowClosing( WindowEvent e )
{
dispose();
}
}
}
=========================================================

A 回答 (2件)

時間があったので見ていたのですが、私の回答に誤りがありましたので訂正します。



>>DialogTest( Frame parent, If_Notifier n)のnが必要ないのであれば、
>>DialogTest( Frame parent)と変更すればいいですし、
>>nが必要なのであればnew DialogTest(this, n)としなければなりません

menuitem1_1.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e )
{
new DialogTest(this) ;
}
}
) ;

上記の箇所ですがインデントが切れていたので気づきませんでしたが、
そもそも、new DialogTest(this) の箇所は
new ActionListener()の定義の中で書かれています。
(ActionListener(){}という書き方は{}内でActionListenerというクラスを定義するための記述です)
したがって、new DialogTest(this) のthisとはActionListenerということになります。
ですので、DialogTest( Frame parent)ではなく、DialogTest( ActionListener parent)と書かなければなりません。
    • good
    • 0
この回答へのお礼

covachanさん、回答有難うございました。
うまく走るようになりました。
今後とも宜しくお願い致します。

お礼日時:2015/10/14 00:57

質問をするのであれば正確に書きましょう。



提示されたソースですが、
FrameTestクラスは
new DialogTest( /*this*/ ) ;

DialogTest クラスは
public DialogTest( /*Frame parent*/ /*, If_Notifier n*/ )

の箇所をコメントアウトしてますよね?

これがそれぞれ
new DialogTest(this) ;
public DialogTest( Frame parent, If_Notifier n)

が正しいと想定して、問題はDialogTest( Frame parent, If_Notifier n)のコンストラクタの引数と
new DialogTest(this) で渡している引数が違いますよね?

DialogTest( Frame parent, If_Notifier n)のnが必要ないのであれば、
DialogTest( Frame parent)と変更すればいいですし、
nが必要なのであればnew DialogTest(this, n)としなければなりません。

情報を渡すとか以前の問題ですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!