2016-08-21 7 views
0

Я проектирование свинг интерфейс, который выглядит следующим образом: enter image description hereДобавить действие и подтвердить входные компоненты в java?

После заполнения информации в текстовом поле и нажать кнопку «добавить», вся информация будет отображаться в таблице below.Here мой код делает что:

private void AddActionPerformed(java.awt.event.ActionEvent evt) {          
    Vector record = new Vector(); 
    record.add(Name); 
    record.add(Email); 
    record.add(Address); 
    record.add(PhoneNumber); 

    String name = this.Name.getText(); 
    String email = this.Email.getText(); 
    String address = this.Address.getText(); 
    String phone = this.PhoneNumber.getText(); 
    System.out.println(phone); 
    DefaultTableModel model = (DefaultTableModel)tblCustomer.getModel(); 
    model.insertRow(ERROR, record); 

} 

Но когда я нажал на кнопку «добавить», ничего не происходит, за исключением этого исключения

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 64 > 4 
at java.util.Vector.insertElementAt(Vector.java:598) 
at javax.swing.table.DefaultTableModel.insertRow(DefaultTableModel.java:374) 
at NewJFrame.AddActionPerformed(NewJFrame.java:290) 
at NewJFrame.access$300(NewJFrame.java:16) 
at NewJFrame$4.actionPerformed(NewJFrame.java:155) 
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) 

Может кто-то указать, что это проблема? Также как вы можете проверить компоненты ввода перед вставкой в ​​таблицу? Пример: если текстовое поле имени равно null, оно отправит сообщение об ошибке для пользователя. Спасибо заранее и извините за мой английский.

+2

Не размещайте изображение IDE. IDE не имеет никакого отношения к вашему вопросу и затрудняет просмотр соответствующих частей формы. Просто разместите изображение формы, если вы разместите какое-либо изображение. Таким образом, вы сможете увидеть, как выглядит форма. – camickr

+0

в качестве дополнения к тому, что сказал @camickr, опубликовать ошибки, которые вы получаете, чтобы мы могли указать проблему. –

+0

исправлено. Спасибо за ваш совет – Wick

ответ

3

Исключение в потоке «АВТ-EventQueue -0 "java.lang.ArrayIndexOutOfBoundsException: 64> 4

model.insertRow (ERROR, record);

Вы не можете просто случайно вставить строку в любом месте таблицы. У вас есть только 4 строки в TableModel, так что вы можете вставить только строки с индексом 0, 1, 2, 3, 4.

Я предлагаю вам нужно просто использовать: метод

model.addRow(record); 

. Затем строка будет добавлена ​​в конец таблицы независимо от того, сколько строк находится в таблице.

+0

Спасибо за ваш ответ. Интересно, как добавить строку в начать за столом? – Wick

1

Это потому, что вы не добавляя ничего к вашему record вектора, вы должны добавить переменные после того, как вы получите текст из полей, попробуйте следующее:

private void AddActionPerformed(java.awt.event.ActionEvent evt) {          
    Vector record = new Vector(); 

    String name = this.Name.getText(); 
    String email = this.Email.getText(); 
    String address = this.Address.getText(); 
    String phone = this.PhoneNumber.getText(); 

    record.add(name); 
    record.add(email); 
    record.add(address); 
    record.add(phone); 

    System.out.println(phone); 
    DefaultTableModel model = (DefaultTableModel)tblCustomer.getModel(); 
    model.insertRow(ERROR, record); 

} 
+0

Все еще ничего не происходит, кроме большого количества исключений – Wick

+0

вопрос с ошибками, которые вы получаете, поэтому мы можем определить, в чем проблема. –

+1

JTable/DefaultTableModel принимает значение null, вы можете добавить пустой вектор, но ERROR имеет значение в 64, (и) или DefaultTableModel (фиксировано на) 4 строки – mKorbel