Separar JTextField em arrays

4 respostas
shogogan

Olá.
eu estou a fazer uma planilha eletronica e estou com um problema na solução mais simples que eu achei [ainda estou com problema no começo mais mesmo assim acho que vai ser simples]

seguinte, eu tenho o JTextField Texto1 que vai me dar informações para fazer uma conta como por exemplo: A1+A2 onde vai pegar informações da tabela e soma-las.
porem eu como a tabela é meio grande (30x7) é meio complicado fazer um por um então estou tentando fazer em arrays

exemplo: A1+A2
separa em 2 ou 3 Strings
com os valores:A1,+,A2
e checar o array da String no caso pra ver se possue A1 no Array e então botar no caso A1 = 13(exemplo) e pegar o A2 tambem e então fazer a conta.
tentei de uma maneira como fazer um split no + porem da erro e eu não sei o motivo[ainda esta o codigo ai].
por isso estou aqui pedindo ajuda.
alguem sabe como fazer isso funcionar direito?

qualquer coisa é bem vinda.

import javax.swing.JButton;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JMenu;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JFileChooser;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.border.LineBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.JTable;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Planilha extends JFrame implements ActionListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	JMenuBar Bar;
	JMenu Arquivo;
	JMenuItem Save,Load,New,Exit;
	JTextField Texto1;
	boolean soNum;
	String[] Colunas =
	         {"A","B","C","D","E","F","G"};
	String[][] data;
	JButton Calcular;
	JPanel a,b;
	Container c;
	JFileChooser JFC = new JFileChooser();
	File arq;
	TableModel modelo = new DefaultTableModel (data,Colunas);
	
	public Planilha(){
		//News
		Bar = new JMenuBar();
		Arquivo = new JMenu("Arquivo");
		Save = new JMenuItem("Salvar");
		Load = new JMenuItem("Abrir");
		New = new JMenuItem("Novo");
		Exit = new JMenuItem("Sair");
		Texto1 = new JTextField("");
		Calcular = new JButton("Calcular");	
		a = new JPanel();
		b = new JPanel();
		c = getContentPane();
		final JTable Tabela = new JTable(modelo);
		JScrollPane scroll = new JScrollPane(Tabela);
		//News
		//Sets
		Tabela.setPreferredScrollableViewportSize(new Dimension(500,400));
		Tabela.setFillsViewportHeight(true);
		((DefaultTableModel) modelo).setNumRows(30);
		
		New.addActionListener(this);
		New.setMnemonic(KeyEvent.VK_N);
		New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MASK));
		
		Save.addActionListener(this);
		Save.setMnemonic(KeyEvent.VK_S);
		Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK));
		
		Load.addActionListener(this);
		Load.setMnemonic(KeyEvent.VK_A);
		Load.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));
		
		Exit.addActionListener(this);
		Exit.setMnemonic(KeyEvent.VK_R);
		Exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,ActionEvent.ALT_MASK));
		
		Calcular.addActionListener(this);
		
		a.setLayout(new BorderLayout());
		a.add(Bar,BorderLayout.NORTH);
		a.setBorder(new LineBorder(Color.BLACK,2));
		a.add(Texto1);
		a.add(Calcular,BorderLayout.EAST);
		
		b.setLayout(new GridLayout(0,1));
		b.add(scroll);
		
		
		c.setLayout(new BorderLayout());
		c.add(a,BorderLayout.NORTH);
		c.add(b,BorderLayout.CENTER);
		//Sets
		
		pack();
		setVisible(true);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		setJMenuBar(Bar);
		Bar.add(Arquivo);
		Arquivo.add(New);
		Arquivo.add(Load);
		Arquivo.add(Save);
		Arquivo.addSeparator();
		Arquivo.add(Exit);
	}

	final public boolean soNum(){
		String s = Texto1.getText();
		for(int i=0;i<s.length();i++){
			if (!Character.isDigit(s.charAt(i))){
				return false;
			}
		}
		return true;
	}
	public void actionPerformed(ActionEvent e) {
		Object Item = e.getSource();
		String calculo = Texto1.getText();
		if (Item == New){
			new Planilha();			
		}else if(Item == Save){
			int Aceita = JFC.showSaveDialog(Planilha.this);
			if (Aceita == JFileChooser.APPROVE_OPTION){
				getTabela(modelo);
			}
		}else if (Item == Load){
			int Aceita = JFC.showOpenDialog(Planilha.this);
			if (Aceita == JFileChooser.APPROVE_OPTION){
				OrganizaTabela();
			}
		}else if(Item == Exit){
			dispose();
		}else if(Item == Calcular){	//ERRO
			calculo.trim();//ERRO
			String[] separa = calculo.split("+");//ERRO
			System.out.println(separa[0]);//ERRO
			System.out.println(separa[1]);//ERRO
		}
		
	}
	
	public void getTabela(TableModel modelo){
		String Texto = "";
		StringBuffer temp = new StringBuffer();
		for (int i = 0;i<modelo.getRowCount();i++){
			String tabA = (String) modelo.getValueAt(i, 0);
			String tabB = (String) modelo.getValueAt(i, 1);
			String tabC = (String) modelo.getValueAt(i, 2);
			String tabD = (String) modelo.getValueAt(i, 3);
			String tabE = (String) modelo.getValueAt(i, 4);
			String tabF = (String) modelo.getValueAt(i, 5);
			String tabG = (String) modelo.getValueAt(i, 6);
			if (tabA == null){
				tabA = " ";
			}
			if (tabB == null){
				tabB = " ";
			}
			if (tabC == null){
				tabC = " ";
			}
			if (tabD == null){
				tabD = " ";
			}
			if (tabE == null){
				tabE = " ";
			}
			if (tabF == null){
				tabF = " ";
			}
			if (tabG == null){
				tabG = " ";
			}
			
			temp.append(tabA+";"+tabB+";"+tabC+";"+tabD+";"+tabE+";"+tabF+";"+tabG+";");
		}
		Texto = temp.toString();
		Gravar(Texto);
		System.out.print(Texto);
	}
	public void Gravar(String text){

		arq = JFC.getSelectedFile();
		
		try {
			BufferedWriter buff = new BufferedWriter(new FileWriter(arq));
			buff.write(text);
			buff.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	public String Abre(){
		String text = "";
		StringBuffer temp = new StringBuffer();
		arq = JFC.getSelectedFile();
		try{
		if(arq.exists()){
				BufferedReader ler = new BufferedReader(new FileReader(arq));
				boolean fim = false;
				while (!fim){
					String Linha = ler.readLine();
				if (Linha == null){
					fim = true;
				}else{
					temp.append(Linha);
					System.out.println(temp);
				}
				text = temp.toString();
				ler.close();
				}
		
		}else{
			JOptionPane.showMessageDialog(null, "Arquivo Inexistente","Ok",JOptionPane.INFORMATION_MESSAGE);
		}
		} catch (IOException e) {
				e.printStackTrace();
		}
		((DefaultTableModel) modelo).setNumRows(0);
		return text;
		
	}
	public void OrganizaTabela(){
		String info = Abre();
		System.out.println(info);
		String[] sepinfo = info.split(";");
		String[][] data = new String[sepinfo.length/modelo.getColumnCount()][modelo.getColumnCount()];
		for (int i=0,j=0;i<sepinfo.length-1;i+=7,j++){
			data[j][0] = sepinfo[i];
			data[j][1] = sepinfo[i+1];
			data[j][2] = sepinfo[i+2];
			data[j][3] = sepinfo[i+3];
			data[j][4] = sepinfo[i+4];
			data[j][5] = sepinfo[i+5];
			data[j][6] = sepinfo[i+6];
			((DefaultTableModel) modelo).addRow(data[j]);
		}
	}
	public static void main(String[]args){
		new Planilha();
	}

}

Shogogan

4 Respostas

blackfalcon

Bem, nao entendi muito ao certo o que voce quer fazer. Mas vou dar um exemplo e voce ve se é algo parecido.

Para conversao de banco de dados, existem algumas ferramentas. Porem, nem sempre é possivel. Uma maneira é utilizando o Excel. Pegamos todos os dados que queremos incluir, colocamos no excel e depois salvamos esse arquivo com o formato de CSV, ou seja, cada campo do excel sera separado por virgula. Entao, neste caso, podemos criar um comando sql que ira inserir cada campo, assim que achar a virgula separadora, que no caso é um “;”.

Caso tenha algum campo que nao tem dado, nao tem problema, ele nao pula isso, apenas nao coloca valor. Ou seja, seria um campo nulo no db. Se for algo do tipo, é so voce salvar o arquivo como .csv e depois criar um loop que ira ate o final dela e fazer o que voce quer fazer. Por exemplo:

Vamos dizer que tenhamos um db que tenha apenas Nome, Idade e UF. Entao, o excel seria assim:

Jose Albino | 38 | SP
Joao Agustinho | 57 | RJ
Maria Alencar | | SP

Ao salvarmos isso como CSV, ficaria assim:

Jose Albino;38;SP
Joao Agustinho;57;RJ
Maria Alencar;;SP

Entende? Entao, voce tem que ter um numero fixo e ao final de numero ( loop ), um comando para passar para proxima linha do csv. Como nao entendi o que voce quer fazer, veja se algo do que tentei te falar sirva a voce.

Abraços

shogogan

não… isso ai é a parte para salvar no caso… ja feita

o que eu estou falando é mais ou menos o do Excel mesmo onde você bota uma linha de comando para executar a ação no caso

ai o exemplo de A1+A2
no meu caso em vez de ir para a celula A3 o calculo ia ser mostrado no JTextField

Shogogan

K

então o cara vai digitar a1+a2 no textfield e no proprio textfield vai retornar o resultado certo?
você pode usar o split ou fazer na raça usando um loop com charAt, comparando com as 4 operações…
ai vc separa os valores em strings e dps eh soh mandar executar

shogogan

vou tentar fazer de um geito que eu pensei agora que é char por char.
e eu não consigo fazer um split no + e eu não sei o motivo

Shogogan

Criado 8 de maio de 2010
Ultima resposta 8 de mai. de 2010
Respostas 4
Participantes 3