2017-02-14 17 views
-1

Я создал эту простую программу, и я хочу, чтобы она была нажата на кнопку, целочисленное значение, которое находится в JTextField, сохраняется в массиве, а я хотите ввести много значений в этом JTextField, нажимая кнопку много раз, затем суммируйте все эти значения и выведите сумму. Как мне это сделать?Сохранить целое число JTextField в массиве, нажав кнопку

public class Test extends JFrame implements ActionListener { 

    JTextField teArdhurat_JTF = new JTextField(15); 
    JButton teArdhurat_JB = new JButton("Fut"); 

    public Test() { 
     setTitle("BILANCI"); 
     setSize(370, 270); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Container c = getContentPane(); 
     c.setLayout(new FlowLayout()); 

     JPanel teArdhurat_JP = new JPanel(); 
     teArdhurat_JP.add(teArdhurat_JTF); 
     teArdhurat_JP.add(teArdhurat_JB); 

     c.add(teArdhurat_JP); 
     teArdhurat_JB.addActionListener(this); 
    } 

    public void actionPerformed(ActionEvent e) { 

     String teArdhurat_GT = teArdhurat_JTF.getText(); 
     int teArdhurat = Integer.parseInt(teArdhurat_GT); 

     ArrayList<Integer> te_ardhurat = new ArrayList<Integer>(Arrays.asList()); 

     //Here is the problem the next value that I enter overwrites the previous value 

     if (e.getSource() == teArdhurat_JB) { 
      te_ardhurat.add(teArdhurat); 
     } 

     int sum = 0; 
     for (int i = 0; i < te_ardhurat.size(); i++) { 
      sum = sum + te_ardhurat.get(i); 
      System.out.println(sum); 
     } 
    } 

    public static void main(String[] args) { 
     new Test(); 
    } 
} 
+0

Вы хотите, чтобы сумма цифр вводилась в текстовое поле? –

+0

Я хочу заполнить ArrayList te_ardhurat = new ArrayList (Arrays.asList()); введя значение в поле JText, нажав кнопку, которую я создал – Falcon

ответ

0

Вы всегда инициализировать массив при нажатии на кнопке ArrayList<Integer> te_ardhurat = new ArrayList<Integer>(Arrays.asList());, поэтому он будет хранить только одно значение на самом деле последнее значение, что вы получите sum = last_value_you_enter, так, чтобы решить вашу проблему, поместите массив из стороны ваш actionPerformed метод как это:

private static ArrayList<Integer> te_ardhurat = new ArrayList<>(); 

public void actionPerformed(ActionEvent e) { 

    String teArdhurat_GT = teArdhurat_JTF.getText(); 
    int teArdhurat = Integer.parseInt(teArdhurat_GT); 

    //Here is the problem the next value that I enter overwrites the previous value 
    if (e.getSource() == teArdhurat_JB) { 
     te_ardhurat.add(teArdhurat); 
    } 

    int sum = 0; 
    for (int i = 0; i < te_ardhurat.size(); i++) { 
     sum += te_ardhurat.get(i); 
     System.out.println(sum); 
    } 

} 

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

Это поможет вам.

0

Поскольку каждый раз, когда вы вызываете метод actionPerformed, он создает новый ArrayList без данных. Область действия этого массива ArrayList до конца метода и будет храниться в стеке.

Вам понадобится переменная-член класса в вашем случае.

public class Test extends JFrame implements ActionListener { 

    JTextField teArdhurat_JTF = new JTextField(15); 
    JButton teArdhurat_JB = new JButton("Fut"); 
    private final ArrayList<Integer> te_ardhurat = new ArrayList<Integer>(Arrays.asList()); 
0

Ваш код и способ компоновки компонентов не очень хороши. Поэтому я решил написать решение с нуля. Прочтите это и узнайте больше о том, как компоновать компоненты качания в панели более профессионально.

package com.java.demo; 

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.HeadlessException; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.List; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.border.EmptyBorder; 

public class TestFrame extends JFrame { 
    List<Integer> numbers = new ArrayList<>(); 

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

    private TestFrame() throws HeadlessException { 
     super(); 

     this.setLocationByPlatform(true); 
     JPanel contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     GridBagLayout gbl_contentPane = new GridBagLayout(); 
     gbl_contentPane.columnWidths = new int[] { 100, 0 }; 
     gbl_contentPane.rowHeights = new int[] { 0, 0, 0 }; 
     gbl_contentPane.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; 
     gbl_contentPane.rowWeights = new double[] { 0.0, 0.0, Double.MIN_VALUE }; 
     contentPane.setLayout(gbl_contentPane); 

     JTextField textField = new JTextField(); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.insets = new Insets(0, 0, 5, 0); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 1; 
     gbc.gridy = 0; 
     contentPane.add(textField, gbc); 
     textField.setColumns(10); 

     JLabel totalLabel = new JLabel("Total:"); 
     gbc.fill = GridBagConstraints.NORTHWEST; 
     gbc.gridx = 0; 
     gbc.gridy = 1; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 
     gbc.weightx = 1; 
     gbc.insets = new Insets(5, 1, 1, 5); 
     contentPane.add(totalLabel, gbc); 

     JButton sumButton = new JButton("Sum"); 
     gbc = new GridBagConstraints(); 
     gbc.insets = new Insets(4, 4, 4, 8); 
     gbc.gridx = 2; 
     gbc.gridy = 0; 
     contentPane.add(sumButton, gbc); 
     sumButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       numbers.add(Integer.parseInt(textField.getText())); 
       totalLabel.setText("Total: " + numbers.stream().mapToInt(Integer::intValue).sum()); 

      } 
     }); 

     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.pack(); 
     this.setVisible(true); 
    } 
} 

Надеюсь, это поможет. Счастливое кодирование.