2016-05-14 11 views
0

Gridlayoutを作成しようとしています。私はJTextFieldコンポーネントから取られたmとnの2つのパラメータを使用しています。スイング - JTextfield入力を使用してGridLayoutを作成する

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

public class GUI extends JFrame 
{ 
public static final int HEIGHT = 75; 
public static final int WIDTH = 450; 

    JLabel m_label, n_label; 
    JTextField m_enter,n_enter; 
    JButton generate; 
    int m,n; 
    GUI g; 

public void draw() 
{ 
    m=Integer.parseInt(m_enter.getText()); 
    n=Integer.parseInt(n_enter.getText()); 
    new Chess(); 
} 

GUI() 
{ 

    setPreferredSize(new Dimension(WIDTH,HEIGHT)); 
    setLayout(new FlowLayout()); 
    setVisible(true); 
    setLocationRelativeTo(null); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setResizable(false); 

    m_label = new JLabel("M:"); 
    m_enter = new JTextField(5); 
    n_label = new JLabel("N:"); 
    n_enter = new JTextField(5); 

    generate = new JButton("Generate!"); 

    add(m_label); 
    add(m_enter); 

    add(n_label); 
    add(n_enter); 

    add(generate); 
    pack(); 

    generate.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) 
     { 
      draw(); 
     } 
    }); 
} 

public static void main(String[] args) 
{ 
    new GUI(); 
}}  

チェスクラス

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

class Chess extends JDialog 
{ 
GUI g; 
public static final int HEIGHT = 600; 
public static final int WIDTH = 600; 
int m,n; 

Chess() 
{ 
    setPreferredSize(new Dimension(WIDTH,HEIGHT)); 
    setVisible(true); 
    setLayout(new GridLayout(m,n)); 
    pack(); 
} 
} 

それは次のエラーを作成します。

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: rows and cols cannot both be zero 
at java.awt.GridLayout.<init>(GridLayout.java:195) 
at java.awt.GridLayout.<init>(GridLayout.java:166) 
at Chess.<init>(Chess.java:15) 
at GUI.draw(GUI.java:23) 
at GUI$1.actionPerformed(GUI.java:55) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6535) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
at java.awt.Component.processEvent(Component.java:6300) 
at java.awt.Container.processEvent(Container.java:2236) 
at java.awt.Component.dispatchEventImpl(Component.java:4891) 
at java.awt.Container.dispatchEventImpl(Container.java:2294) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
at java.awt.Container.dispatchEventImpl(Container.java:2280) 
at java.awt.Window.dispatchEventImpl(Window.java:2750) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

プロセスは0

+0

1)インデントするコード行とブロックの論理的で一貫した形式を使用します。インデントは、コードの流れをより簡単にするためのものです。 2)[Java Swingのset(Preferred | Maximum | Minimum)サイズメソッドの使用を避けるべきですか?](http://stackoverflow.com/q/7229226/418556)(Yes。) –

+0

完全なエラーメッセージであり、メッセージの解釈ではありません。またどの線が関わっているかを示す。 –

+1

ちょっと、あなたは例外をスローするコードを投稿していません!あなたのチェスのコードから来ている可能性が高いです。チェスのコンストラクタに 'm'も' n'も渡していないことに注意してください。 –

答えて

2

あなたの問題はあなたがチェスのメートルを設定することはありませんしているということであるかの終了コードで終了n値。チェスに外のクラスにこれらのフィールドを設定し、その後にそれらを渡す機能を可能にするコンストラクタを与える

Chess(int m, int n) { 
    this.m = m; 
    this.n = n; 
    //if statement to check if NULL or both set to zero 
    //{ 
     //TODO: Check to make sure no NULLs or Zero values 
    //} 
    setPreferredSize(new Dimension(WIDTH,HEIGHT)); 
    setVisible(true); 
    setLayout(new GridLayout(m,n)); 
    pack(); 
} 

キー教訓:。

  • プログラミングには「魔法」はありません。あなたのフィールドは魔法のように変わることはなく、変更したい場合はプログラマが変更する必要があります。
  • 問題があり、と表示されている場合は、などの重要な情報が含まれているため、受信した例外スタックトレースメッセージを無視しないでください。
  • エラーの原因となったキーコードを投稿しなかったため、当初の質問は解決できませんでした(上記の点を参照)。今後の質問を改善し、まともなヘルプを得る機会を増やす方法の詳細については、tourhelpおよびhow to ask good questionsセクションをご覧ください。
関連する問題