2016-05-14 57 views
0

我正在嘗試創建Gridlayout。我使用兩個參數 - m和n,取自JTextField組件。Swing - 使用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)(是) –

+0

請顯示您的實際和完整的錯誤消息,而不是消息的解釋。同時指出涉及哪些行。 –

+1

哎呀,你甚至沒有發佈拋出異常的代碼!這很可能來自您的國際象棋代碼。請注意,您不會將'm'和'n'傳遞給您的Chess構造函數。 –

回答

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(); 
} 

主要經驗教訓:

  • 沒有「神奇」的節目。你的領域不會奇蹟般地改變,如果你想讓他們改變,程序員必須改變它們。
  • 不要忽視你接受,因爲它包含有價值的信息,這將幫助你解決你的問題,包括其中問題和它是什麼異常堆棧跟蹤信息。
  • 您的問題最初不可回答,因爲您沒有發佈導致錯誤的關鍵代碼(請參閱上面的要點)。請查看tour,help以及how to ask good questions部分,以獲取有關如何改善您未來的問題以及增加獲得體面的幫助的機會的更多信息。