2016-08-23 11 views
1

問題:オブジェクト値を別のメソッドから変更する

値を別の方法に変更したいが、別の方法から変更したい。フルコード(要求されたように)以下の通りである:

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

public class main { 

    public static void about() { 
     JDialog aboutWindow = new JDialog(); 
     aboutWindow.setTitle("About kingfisher a0.0.3"); 
     aboutWindow.setSize(300, 600); 
     aboutWindow.setModal(true); 
     JMenuBar menubar = new JMenuBar(); 
     JMenu control = new JMenu("Control"); 
     JMenuItem quit = new JMenuItem("quit"); 

     quit.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       aboutWindow.setVisible(false); 
      } 
     }); 

     control.add(quit); 
     menubar.add(control); 
     aboutWindow.add(menubar); 
     JLabel name = new JLabel("kingfisher"); 
     aboutWindow.add(name); 
    } 

    public static void main(String args[]) { 
     //Defined window dimensions 
     JFrame controlpanel = new JFrame(); 
     controlpanel.setTitle("kingfisher a0.0.3"); 
     controlpanel.setSize(500, 400); 
     controlpanel.add(new JLabel("The angels have the blue box")); 
     JMenuBar menubar = new JMenuBar(); 
     //defining menu groups 
     JMenu windows = new JMenu("Windows"); 
     JCheckBoxMenuItem chat = new JCheckBoxMenuItem("Chat"); 
     JCheckBoxMenuItem filetransfer = new JCheckBoxMenuItem("Filetransfer"); 
     JCheckBoxMenuItem settings = new JCheckBoxMenuItem("Settings"); 
     windows.add(chat); 
     windows.add(filetransfer); 
     windows.add(settings); 
     JMenu control = new JMenu("Control"); 
     JMenuItem quit = new JMenuItem("Quit"); 

     quit.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       System.exit(0); 
      } 
     }); 
     control.add(quit); 
     JMenu help = new JMenu("Help"); 
     JMenuItem support = new JMenuItem("Support"); 
     JMenuItem about = new JMenuItem("About"); 
     about.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       //HERE! 
       aboutWindow.setVisible(true); 
      } 
     } 
     ); 
     help.add(support); 
     help.add(about); 
     menubar.add(control); 
     menubar.add(windows); 
     menubar.add(help); 
     controlpanel.setJMenuBar(menubar); 
     controlpanel.setVisible(true); 
    }; 
}; 

aboutWindowabout方法で同じクラスではなく、main方法ではなく、で定義されています。どのように私はそれに正しく対処しますか?

私の現在の解決策(全く動作していません)はmainメソッドにありますが、私はそれをコメントでマークしました。

+1

この質問は不明です。どのような価値を変えようとしていますか? "about"メソッドのコードを投稿するか、問題をよりよく説明してください。 – albogdano

+0

更新され、ソース全体が追加されました。 – sam4ritan

答えて

1

は、(キャメルケースMainにあなたのクラスの名前を変更することもよいでしょう)aboutWindowクラス変数を作ってみましょう:

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

public class Main 
{ 
    public static JDialog aboutWindow; 

    public static void about() { 
    Main.aboutWindow = new JDialog(); 
    Main.aboutWindow.setTitle("About kingfisher a0.0.3"); 
    Main.aboutWindow.setSize(300,600); 
    Main.aboutWindow.setModal(true); 
     JMenuBar menubar = new JMenuBar(); 
      JMenu control = new JMenu("Control"); 
       JMenuItem quit = new JMenuItem("quit"); 
        quit.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent event) { 
          Main.aboutWindow.setVisible(false); 
          } 
         } 
        ); 
       control.add(quit); 
      menubar.add(control); 
     Main.aboutWindow.add(menubar); 
    JLabel name = new JLabel("kingfisher"); 
    Main.aboutWindow.add(name); 
    } 

    public static void main (String args[]){ 
    //Defined window dimensions 
    JFrame controlpanel = new JFrame(); 
    controlpanel.setTitle("kingfisher a0.0.3"); 
    controlpanel.setSize(500,400); 
    controlpanel.add(new JLabel("The angels have the blue box")); 
     JMenuBar menubar = new JMenuBar(); 
     //defining menu groups 
      JMenu windows = new JMenu("Windows"); 
       JCheckBoxMenuItem chat = new JCheckBoxMenuItem("Chat"); 
       JCheckBoxMenuItem filetransfer = new JCheckBoxMenuItem("Filetransfer"); 
       JCheckBoxMenuItem settings = new JCheckBoxMenuItem("Settings"); 
       windows.add(chat); 
       windows.add(filetransfer); 
       windows.add(settings); 
      JMenu control = new JMenu("Control"); 
       JMenuItem quit = new JMenuItem("Quit"); 
       quit.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent event) { 
         System.exit(0); 
         } 
        } 
       ); 
       control.add(quit); 
      JMenu help = new JMenu("Help"); 
       JMenuItem support = new JMenuItem("Support"); 
       JMenuItem about = new JMenuItem("About"); 
        about.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent event) { 
          //HERE! 
          Main.aboutWindow.setVisible(true); 
          } 
         } 
        ); 
       help.add(support); 
       help.add(about); 
      menubar.add(control); 
      menubar.add(windows); 
      menubar.add(help); 
     controlpanel.setJMenuBar(menubar); 
    controlpanel.setVisible(true); 
    }; 
}; 
+0

ありがとうございます。しかし、私は少し違うと思う。私はソースコード全体を追加しました。うまくいけば、私の状況はより明確になります。 – sam4ritan

+0

ありがとうございます。できます。しかしそれはまた別の問題を引き起こしました。便利なものを追加する前に、プレースホルダ 'JLabel'を適用したかったのです。 しかし、私がそれを追加すると、メニューバーは消えました。私は行方不明の何か? 'Main.aboutWindow.add(menubar); JLabel名=新しいJLabel( "kingfisher"); aboutWindow.add(name); Main.aboutWindow.setVisible(false); \t} ' – sam4ritan

+1

(新しく作成された)' JPanel'に 'menubar'と 'JLabel'を追加し、' aboutWindow'にこの 'JPanel'だけを追加するとうまくいくかもしれません。よく分かりません。 – bruno

1

aboutWindowは、aboutという名前のメソッドで宣言されているローカル変数であるとします。 aboutWindowを他のメソッド(あなたの質問に表示されているものなど)のコードに表示する簡単な方法は、フィールドとして宣言することです。そのためには、aboutメソッドの宣言を外してください。

+0

これは助けになりました。しかし、それは一見、別の問題を引き起こしました。 aboutWindowでは、メニューバーとラベルがあります。以前は、すべてをメインに置いていた醜い解決策で動いていました。今、ラベルのコメントを解除すると、メニューバーが消えます。 – sam4ritan

+0

私はそれを助けるための十分な情報がありませんが、私はあなたが "どこにものを宣言する"と "内部へのアクセスを得る方法"のような重要な教訓を学び始めたと思います。これは、実際にはプログラミングのより重要な側面の1つです。学習をお楽しみください:) –

+1

@ sam4ritanこの回答が役に立ちましたら、それを受け入れるにはチェックボタンをクリックしてください。ありがとう! – albogdano

関連する問題