2016-05-14 20 views
0

Ich versuche eine Gridlayout zu erstellen. Ich verwende zwei Parameter - m und n, die von JTextField Komponenten stammen.Swing - Erstellen von GridLayout mit JTextfield Eingabe

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

Schach Klasse

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

Es schafft Fehler folgende:

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) 

Prozess mit Exit-Code beendet 0

+0

1) Verwenden Sie eine logische und konsistente Form der Einrückung von Codezeilen und -blöcken. Die Einrückung soll den Codefluss leichter nachvollziehen lassen! 2) Siehe [Soll ich die Verwendung von festgelegten (Preferred | Maximum | Minimum) Size-Methoden in Java Swing vermeiden?] (Http://Stackoverflow.com/q/7229226/418556) (Ja.) –

+0

Bitte zeigen Sie Ihre tatsächlichen und vollständige Fehlermeldung, keine Interpretation der Nachricht. Geben Sie auch an, um welche Zeilen es sich handelt. –

+1

Heck, du postest nicht einmal den Code, der die Ausnahme auslöst! Es kommt wahrscheinlich von deinem Chess Code. Beachten Sie, dass Sie 'm' und' n' nicht in Ihren Chess-Konstruktor übergeben. –

Antwort

2

Ihr Problem ist, dass man nie Chess 'm sind Einstellung oder n Werte. Geben Sie Schach einen Konstruktor, der außerhalb Klassen die Fähigkeit erlaubt, diese Felder zu setzen, und geben sie dann in

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

Wesentliche Erkenntnisse:.

  • Es gibt keine „Magie“ in der Programmierung. Deine Felder werden sich nicht magisch verändern, und wenn du willst, dass sie sich ändern, musst du sie ändern.
  • Sie die Ausnahme Stacktrace Nachricht nicht ignorieren, die Sie erhalten, da sie wichtige Informationen enthält, die Sie Ihre Probleme lösen helfen, einschließlich wo das Problem ist und was es ist.
  • Ihre Frage war anfänglich nicht beantwortbar, weil Sie den Schlüsselcode nicht gepostet haben, der den Fehler verursachte (siehe den obigen Punkt). Bitte werfen Sie einen Blick auf die tour, die help sowie die how to ask good questions Abschnitte für weitere Informationen zur Verbesserung Ihrer zukünftigen Fragen und erhöhen Ihre Chancen auf anständige Hilfe.
Verwandte Themen