2016-03-27 16 views
0

パッケージswingtraining;public static void main(string args [])でstaticを使用しない方法はありますか?

import static java.awt.Color.BLACK; 
import java.awt.GridBagConstraints; 
import static java.awt.GridBagConstraints.CENTER; 
import static java.awt.GridBagConstraints.NORTH; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.LayoutManager; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class JFrameTest extends JFrame{ 

public JFrameTest(){ 

    setSize(800,800); 
    setTitle("Hello :D"); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    setResizable(true); 
    setVisible(true); 

} 

public class GridBagLayoutTest extends GridBagLayout{ 

     public GridBagLayoutTest(){ 

     setLayout(new GridBagLayout()); 

     }; 

}; 

public static class JPanelTest extends JPanel{ 

     public JPanelTest() { 

     setBackground(BLACK); 
     setOpaque(true);  

    } 

}   



public static class JButtonTest extends JButton{ 

      public JButtonTest(){ 



      }; 

     }; 



public void main(String args[]){ 

     java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
     JFrameTest T = new JFrameTest(); 
     JPanelTest Jp1 = new JPanelTest(); 
     JButtonTest Jb1 = new JButtonTest(); 
     GridBagLayoutTest Gb1 = new GridBagLayoutTest(); 
     GridBagConstraints c = new GridBagConstraints(); 

     c.ipadx = 100; 
     c.ipady = 100; 
     c.gridheight = 1; 
     c.gridwidth = 1; 
     c.weightx = 1; 
     c.weighty = 1; 
     c.insets = (new Insets(0,0,0,500)); 

     Jb1.setLayout((LayoutManager) c); 
     T.add(Jp1); 
     Jp1.add(Jb1); 


     } 
    }); 

} 

} 

これをコンパイルすると、私には主な方法がないというメッセージが表示されます。私のメインメソッドを静的にすると、私はrun()でlayoutManagerを使うことができないので、どうすればこのパスを作ることができるのだろうかと思っていました。あるいは、このインスタンスでlayoutManagerを動作させる別の方法かもしれません。

+1

「私はrun()でlayoutManagerを使用できません」という意味はどうですか?それは私にとってうまくいくはずです。しかし、はい、 'main'は有効なエントリーポイントになるために静的でなければなりません。 –

+0

まず 'public static void main(String [] args)'メソッドを持つ "main"クラスを作り、これを使って "main"クラスのインスタンスを作成します。実際にプログラムをビルドして起動するには、「main」クラスを使用します。一般的な経験則として、 'JFrame'からの拡張は避けてください。理由はいくつかありますが、1つのユースケースにロックされます。 – MadProgrammer

+0

' GridBagConstraints'型の 'c'を' LayoutManager'にキャストすることはできません。投稿を編集して実際のエラーメッセージをコピーして貼り付けると、「レイアウトマネージャを使用できません」と思うようになります(メインの不足に関するメッセージではありません)。 –

答えて

1

コメントにすでに述べたように、その正確な署名でメインメソッドなしでJavaクラスを実行することはできません。

public static void main(String args[]) 

私は少しあなたのコードをcleaneadしました。それはあなたのコードですが、まだ控えめです。 サブタイトルJPanelJButtonまたはGridBagLayoutは、特定の背景などが必要になるたびにサブクラス化する必要はありません。元のクラスをインスタンス化し、すでに定義されているメソッドを使用してその属性を設定します。

import java.awt.Color;  // no static import needed 
    import java.awt.GridBagConstraints; 
    import java.awt.GridBagLayout; 
    import java.awt.Insets; 

    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 
    import javax.swing.SwingUtilities; 

    public class JFrameTest extends JFrame { 

     public JFrameTest() { 

     setSize(800,800); 
     setTitle("Hello :D"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setResizable(true); 

     initComponents(); // <- Include your components in the main frame 

     setVisible(true); 

    } 

    private void initComponents() { 

     // Use meaningful names for your variables 
     // Respect Java naming conventions. No variable name start with a capital letter.   
     JPanel panel = new JPanel(); 
     panel.setBackground(Color.BLACK);  
     panel.setOpaque(true); 
     panel.setLayout(new GridBagLayout()); // no need for static access 

     JButton button = new JButton(); 

     GridBagConstraints gbc = new GridBagConstraints(); // this is not a Layout. It represents constrains to be used in the GribBagLayout on adding an element 
     gbc.ipadx = 100; 
     gbc.ipady = 100; 
     gbc.gridheight = 1; 
     gbc.gridwidth = 1; 
     gbc.weightx = 1; 
     gbc.weighty = 1; 
     gbc.insets = (new Insets(0,0,0,500)); 

     panel.add(button, gbc); 
     add(panel); // <- this.add(panel) where this is your instance of JFrameTest 

    } 


public static void main(String args[]){ 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new JFrameTest(); 
     } 
    }); 

} 
} 
1

メインメソッドでは以下のようにする必要があります。

 GridBagLayoutTest Gb1 = T.new GridBagLayoutTest(); 
1

java mainでは、通常、アプリケーションを開始するエントリポイントです。それは私たちが作成する他のメソッドと同じではありません。名前、パラメータ、返り値の型を私たちの必要と考えに従って提供することができます。 mainメソッドは特別なメソッドなので、という定義済みの署名があります。

署名(必須:publicstatic、戻り型:void、入力パラメータ:String[]とメソッド名:main、下部ケース内のすべてのアルファベット)これは

以下のようにメインのですJVMがアプリケーションの実行中に読み込むメソッドであり、初期化コードをその中に入れておく必要があります。

  1. あなたは、静的init()メソッドを作成することができますし、mainから、あなたはあなたがあなたのクラスのオブジェクトを作成し、プログラムのさらなる実行のためにあなたが持っているメソッドを呼び出すことができますinit()
  2. を呼び出すことができます。

これらはあなたがmainでコードを書くことができる方法としてだけヒントはあるが、私たちのアプリケーションが実行させるために、mainメソッドの契約を尊重することが重要です。

関連する問題