2016-05-14 4 views
0

Я пытаюсь создать Gridlayout. Я использую два параметра - m и n, которые берутся из компонентов JTextField.Swing - создание GridLayout с использованием ввода JTextfield

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) См. [Я должен избегать использования методов Set (Preferred | Maximum | Minimum) в Java Swing?] (Http://stackoverflow.com/q/7229226/418556) (Да.) –

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

Основные уроки:.

  • Там нет «магия» в программировании. Ваши поля не изменят магию, и если вы хотите, чтобы они изменились, вы, программист, должны их изменить.
  • Не игнорируйте сообщение об исключении stacktrace, которое вы получите, так как оно содержит ценную информацию, которая поможет вам решить ваши проблемы, в том числе , где проблема и что это такое.
  • Ваш вопрос первоначально был невозможен, потому что вы не опубликовали код ключа, вызывающий ошибку (см. Выше). Пожалуйста, просмотрите tour, help, а также разделы how to ask good questions для получения дополнительной информации о том, как улучшить ваши будущие вопросы и увеличить ваши шансы получить достойную помощь.
Смежные вопросы