• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文: static 参照するには??)

JFrameの非staticメソッドgetContentPane()をstatic参照することはできません

nda23の回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

static とは最初(実行前のディスク上にファイルとして 存在する時点)から実体があり、プログラムがメモリに ロードされた時点で、即座に実行可能です。 これに対し、インスタンスに依存する(非static)ものは インスタンス化して初めてメモリ上に展開されるので、それ 以前には参照したり、実行したりできません。 Canvas1をインスタンス化した後、そのインスタンスの メソッドを呼ぶべきです。 Canvas1 c = new Canvas1; Container gc = c.getContentPane(); //←このように gc.add(jp);

htgo
質問者

お礼

 nda23さん、回答有難うございます。  下の例では、mainメソッドの中にint i = 10 ;を書くとエラーにはなりません。  しかし、mainメソッドの外にint i = 10 ;と書くと、「非staticフィールドiを static参照できません」と同様のエラーになります。  このエラーの原因についても、やはり「mainメソッドからは、インスタンス化され た・・・・にしかアクセス出来ない」というルールと、同じ原因なのでしょうか?  このへんのところがよく理解出来ていないのですが、再度ご教示宜しくお願い致します。 ====================================================================== public class Sample { /*static*/ int i = 10 ; public static void main(String[] args){ // int i = 10 ; System.out.print("i = " + i); } }

関連するQ&A

  • JFrameのエラーの原因が分かりません。

     java初心者です、宜しくお願いします。  JFrameのコードを下記のように書いてやりましたが、「サーバーにデプロイするものが見つかり ません。」というエラーが出ます。   色々と参考書を見ながら勉強していますが、エラーの原因がさっぱりわかりません。    どなたか宜しくお願いします。 ============================================================================ public class JF4 extends JFrame { public void init() { Container cnt = getContentPane(); setBackground(Color.RED); setSize(400,400); setTitle("title"); setVisible(true); } } ================================================================================= public class JF4 extends JFrame { public void init() { Container cnt = getContentPane(); JPanel panel = new JPanel(); panel.setBackground(Color.RED); getContentPane().add(panel); setSize(400,400); setTitle("title"); setVisible(true); } }

  • SwingでgetContentPaneのエラーです、お願いします

     今晩は、java勉強中のものです、宜しくお願いします。  下のようなプログラムを組んでみましたが、「型JFrameから非staticメソッドgetContentPane()にstatic参照 することは出来ません」というエラーコードです。  原因が良く分かりません、どなたか教えて下さい。  いくら考えても原因がよく分かりません、宜しくお願いします。 ================================================================ public class Panel_train extends JFrame{ public static void main(String[] args) { Container cnt = getContentPane(); JPanel jpanel = new JPanel(); JTextArea jtext = new JTextArea("Hello World", 100, 50); jpanel.add(jtext); cnt.add(jpanel, BorderLayout.CENTER); JFrame frame = new JFrame("テスト"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200, 100); frame.setVisible(true); } }

    • ベストアンサー
    • Java
  • swingのJframeについて

    JFrameについて質問があるのですが import javax.swing.*; public class JFrameTest extends JFrame{ public static void main(String[] args){ JFrameTest frame = new JFrameTest(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } JFrameTest(){ JPanel p = new JPanel();   Container contentPane = getContentPane(); ContentPane.add(p);   pack(); } } このプログラムと import javax.swing.*; public class JFrameTest{ public static void main(String[] args){ JFrame frame = new JFrame("フレームのタイトル"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds( 10, 10, 300, 200); frame.setVisible(true); JPanel p = new JPanel();   Container contentPane = frame.getContentPane(); frame.ContentPane.add(p);   frame.pack(); } } このプログラムは何が違うのでしょう? やってることはまったく一緒だと思ってたのですが、全然違うみたいです。 上のプログラムの JFrameTest(){ はコンストラクタと呼ばれるものなのでしょうか? しょぼい質問で申し訳ないのですが誰か教えていただけないでしょうか。

    • ベストアンサー
    • Java
  • 「staticでない…」について

    今,下記のプログラムを実行させたいのですが,次のエラーが出て困っています。基本的なことだと思いますが,つまずいて修復できません。 どのような対処をすればよいでしょうか。 エラー:「staticでない変数thisをstaticコンテキストから参照することができません。」 プログラム import java.awt.*; import java.awt.geom.*; import javax.swing.*; import java.util.*; public class Test{ public static int R,G,B; public static void main (String[] args){ R = Integer.parseInt(args[0]); G = Integer.parseInt(args[1]); B = Integer.parseInt(args[2]); MyFrame frame = new MyFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } class MyFrame extends JFrame{ public static final int WIDTH = 400; public static final int HEIGHT = 400; public MyFrame(){ setTitle("Test"); setSize(WIDTH,HEIGHT); Container contentPane = getContentPane(); MyPanel panel = new MyPanel(); contentPane.add(panel);}} class MyPanel extends JPanel{ public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; Rectangle2D rect = new Rectangle2D.Double(100,100,100,50); g2.setColor(new Color(R,G,B)); g2.fill(rect);}}}

    • ベストアンサー
    • Java
  • ボタンが表示されません

    //テキストパッドをつくっています。 //このプログラムはボタンが表示されませんなぜ? import java.awt.*; import javax.swing.*; class Test_Text extends JFrame{ public static void main(String args[]){ Sample_text st = new Sample_text(); JFrame jf = new JFrame("Test_Text"); JTextArea jt = new JTextArea(50,30); Container c = jf.getContentPane(); c.add(jt,BorderLayout.PAGE_START); jf.pack(); jf.setVisible(true); jf.setDefaultCloseOperation(EXIT_ON_CLOSE); } public void Sample_text(){ JButton j1,j2; j1 = new JButton("編集"); j2 = new JButton("保存"); setLayout(new FlowLayout()); this.add(j1); this.add(j2); } }

  •  型Containerのメソッドadd(String ,Compone

     型Containerのメソッドadd(String ,Component)は引数(JPanel ,String)に適用できません。  今晩は、java初心者です、エラーの意味が理解出来ません、宜しくお願い致します。  《A》というプログラムと《B》というプログラムで、クラスを「class MyPanel extends JPanel」と「class JPanel」に変えただけで、「型Containerのメソッドadd(String ,Component)は引数(JPanel ,String)に適用できません。」というエラーがでます。  一体何が原因でしょうか。  JPanelを継承したクラス(MyPanel)を呼び出すのか、そのまま、JPanelクラスを呼び出すのかの違いだけで、内容的には何も変わるところがないはずだと思うのですが。  意味が理解出来ません。 ======================================================================== 《A》 public class Sample extends JFrame { Sample() { this.setSize(300,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MyPanel panel = new MyPanel(); this.add(panel , BorderLayout.CENTER); this.setVisible(true); } public static void main(String[] args) { new Sample(); } } class MyPanel extends JPanel { public void paintComponent(Graphics g) { g.setColor(Color.red); g.fillOval(50,50,100,100); } } ============================================================ 《B》 public class Sample extends JFrame { Sample() { this.setSize(300,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); this.add(panel , BorderLayout.CENTER); this.setVisible(true); } public static void main(String[] args) { new Sample(); } } class JPanel { public void paintComponent(Graphics g) { g.setColor(Color.red); g.fillOval(50,50,100,100); } } =======================================================================

    • ベストアンサー
    • Java
  • JPanelの切り替えと再描画

    ContainerにJPanelをaddし、ボタンを押すことで現在addされているJPanelとは違うJPanelを生成し、再描画させようとしているのですが、うまくいかないため、質問致しました。 -- src --- public class Test extends JFrame implements ActionListener {   Container container;   JPanel panel;   JButton btn;      public Test() {     container = getContentPane();     container.setLayout(new BorderLayout());     // ボタン用パネル     JPanel btnp = new JPanel();     btnp.setLayout(new FlowLayout());     container.add(btnp, BorderLayout.NORTH);          btn = new JButton("aaa");     btn.addActionListener(this);     btnp.add(btn);          // 対象のパネル     panel = new JPanel();       (略)panelの設定     container.add(panel, BorderLayout.CENTER);     setVisible(true);     setBounds(50, 50, 300, 300);     setDefaultCloseOperation(EXIT_ON_CLOSE);   }      public void actionPerformed(ActionEvent e) {     if (e.getSource() == btn) {       container.remove(1);       panel = new JPanel();  // 本来はJPanelを継承したクラスをnewしています       container .add(panel);       repaint();       // ※     }   }      public static void main(String args[]) {     Test t = new Test();   } } ※の箇所をcontainer.repaint() にしたり、paintImmediaely() にしたり出来そうな事を色々試したつもりではいるのですが、うまくいきません… ボタン押下後に、ウィンドウの枠をクリックすると描画されるのですが、いまいちよくわかりません… なにか分かる方いらっしゃいましたらご教授願います。

  • シンボルを見つけられません

    javaについて勉強しているのですが、円の中に四角を作るというプログラムを作ろうとしたところ tes.java:43:シンボルを見つけられません。 シンボル:メソッド drawSquare(int,int,int,java.awt.Graphics) 場所:Assortのクラス a.drawSquare(x,y,w,g); ^ というエラーが出てコンパイルできません。drawCircleからdrawSquareを実行するようにしたいのですが、どうしたらよいか教えていただけないでしょうか。 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class tes { static MyCanvas mc; public static void main(String[] args) { tes ac_listener = new tes(); JFrame jf = new JFrame("tes"); JPanel p = new JPanel(); mc = new MyCanvas(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mc.setPreferredSize(new Dimension(700,700)); jf.getContentPane().add(mc); p.add(mc); jf.getContentPane().add(p); jf.pack(); jf.setVisible(true); } } abstract class Assort{ double x,y; } class Square extends Assort{ public void drawSquare(int x, int y, int w, Graphics g) { double k=Math.sqrt(2); double _w=w/2/k; g.drawRect(x-(int)_w/2, y-(int)_w/2, (int)_w, (int)_w); } } abstract class Circle extends Assort{ } class Circle1 extends Circle { Assort a; Circle1(Assort _a) { a = _a; } void drawCircle(int x, int y, int w, Graphics g){ g.drawOval(x-w/4,y-w/4,w/2,w/2); a.drawSquare(x,y,w,g); } } class MyCanvas extends JPanel { public void paintComponent( Graphics g ) { super.paintComponent(g); Circle1 d1 = new Circle1 ( new Square() ); d1.drawCircle(350,350,700,g); } }

    • ベストアンサー
    • Java
  • Eclipseから実行すると画像が読み込まれない

    下記のコードをEclipseから実行すると画像が読み込まれないのですが、コマンドプロンプトから実行すると画像が読み込まれます。 コードが同じなのに不思議です…。 原因はどんなことが考えられるのでしょうか? class test extends JFrame{ public static void main(String args[]){ test frame = new test("タイトル"); frame.setVisible(true); } test(String title){ setTitle(title); setBounds(100, 100, 500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); ImageIcon icon1 = new ImageIcon("img.jpg"); JLabel label1 = new JLabel(icon1); p.add(label1); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • フレームを消したい

    こんにちは。 いつもお世話になっております。 また、どうしてもわからないことが出てきてしまいました。 質問よろしいでしょうか? 以下のプログラムを実行して 「次へ」と書かれたボタンをクリックし 次に現れるフレーム上の「このフレームだけ消す」 と書かれたボタンをクリックしたときに 「f2」(2つ目のフレーム)だけ閉じるようにしたいのです。 以下の場合は両方とも閉じてしまうのです。 何かよい方法ご存知ありませんか? よろしくお願いいたします。 ================================================== import java.awt.*; import javax.swing.*; import java.awt.event.*; class unload { public static void main(String[] args) { JFrame f=new JFrame("kiki"); Origin p=new Origin(); Container ct=f.getContentPane(); ct.add(p); f.pack(); f.setVisible(true); } } class Origin extends JPanel implements ActionListener { JButton b; Origin() { b=new JButton("次へ"); this.add(b); b.addActionListener(this); } public void actionPerformed(ActionEvent e) { if (e.getSource()==b) { JFrame f2=new JFrame(); Origin2 p2=new Origin2(); Container ct=f2.getContentPane(); ct.add(p2); f2.pack(); f2.setVisible(true); } } } class Origin2 extends JPanel implements ActionListener { JButton b2; Origin2() { b2=new JButton("このフレームだけ消す"); this.add(b2); b2.addActionListener(this); } public void actionPerformed(ActionEvent e) { if(e.getSource()==b2) { System.exit(0); } } }

    • ベストアンサー
    • Java