Simple java spreadsheet

aminem2080 Messages postés 5 Date d'inscription mardi 1 octobre 2013 Statut Membre Dernière intervention 4 octobre 2013 - 1 oct. 2013 à 22:31
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 7 oct. 2013 à 08:02
salut les gars
je suis nouvaux au java mais j'un assignment que je dois fair un program
comme ms excel qui a 20 sur 20 cellule et un textfield ou vas les formules et
les references du cellule selectionne;
j'ai parveni a fair un tableur qui a fonction bien mais c'est qui m'echape ce les formule
comment utulisatuer peu calculer for example(=SUM(F4:H4) ou =C2+D2-F2)
quelqu'un peu m'aide sur vous plais!!!
merci
Dieu Vous garde

8 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
2 oct. 2013 à 07:55
Salut,

Je ne suis pas certain de comprendre tes explications, tu as des JTextField c'est ca ?

Dans ce cas, Tu peux ajouter sur tes JTextField des focusListener, quand le focus est perdu, si textField.charAt(0)='=' c'est que tu as une formule à évaluer il faut donc le faire, quand le focus est gagné, tu dois restaurer la formule avec le = pour que l'utilisateur puisse modifier la formule
1
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
2 oct. 2013 à 08:01
Voilà comment j'aurais créé la classe qui permet de gérer les cellules :

public class Cellule extends JTextField {

	private String inFormat;
	private String outFormat;
	
	public Cellule(){
		inFormat="";
		outFormat="";
		addFocusListener(new FocusListener(){
			@Override
			public void focusGained(FocusEvent e){
				setText(inFormat);
			}
			
			@Override
			public void focusLost(FocusEvent e){
				inFormat=getText();
				outFormat=evaluerFormule();
				setText(outFormat);
			}
		});
	}
	
	public String evaluerFormule(){
		/* 
		 * Là tu écris le code qui te permet de calculer
		 * le résultat de ta formule
		 */
		 return null;
	}

}
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
3 oct. 2013 à 07:58
Dans ce cas là, c'est encore plus simple, ton JTextField est associé à une case de la JTable, dès que le JTextField perd le focus, tu effectues le calcul et tu affiches le résultat dans la case correspondante.

Attention, le parsing d'expression arithmétique est une opération assez complexe...
1
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
3 oct. 2013 à 08:02
Dans cette source, j'ai implémenté un parseur d'expression mathématiques : http://codes-sources.commentcamarche.net/source/54053-representation-graphique-de-fonctions-et-objets-geometriques

Tu vas voir, c'est complexe, j'espère que tu connais les design pattern...
0
aminem2080 Messages postés 5 Date d'inscription mardi 1 octobre 2013 Statut Membre Dernière intervention 4 octobre 2013
1 oct. 2013 à 22:34
mais ils ne veut pas des autres libraries comme openOffice ils veut cellemet
les javax.swing et le java.awt
0
aminem2080 Messages postés 5 Date d'inscription mardi 1 octobre 2013 Statut Membre Dernière intervention 4 octobre 2013
2 oct. 2013 à 18:51
merci beaucoup cs_Julien39 je suis tres content que vous avez pris votre temps pour mes repondre.
mais comme vous les disiaient ce pue etre que je n'ai pas bien pose
ma question;je voudre avoir un JTable qui a 20 colonnes(intitule des A a T) sur 20 lignes/rows(des 1 a 20),au desus de cette JTable il doit y avoir un JTextField quand utulisatuer clicke sur un cellule dans le tableau les contenues ou son reference s'affiche dans le textfield (mais ca je me suis occupe de ca le fair et ca marche ). ce que je ne sais pas c'est comment quant utulisatuer fait entre le formule dans le textfield ce formule doit fair les calculation dans les tableau et affiche la reponse dans un cellule selectionne.
desole pour un long message
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aminem2080 Messages postés 5 Date d'inscription mardi 1 octobre 2013 Statut Membre Dernière intervention 4 octobre 2013
Modifié par aminem2080 le 3/10/2013 à 19:43
Merci encore de me donnes tes idees bruillant,
si ca t'annui pas vois ci mon travail sur la quel je voudre ton aide
comment je pue fair mes propre formule qui vas etre excutee quand mon txtfield perd les focus ;
je pense qu'il faut y avoir un class ou methode destine a fair ca!!
c'est la ou je n'arrive pas a programme.
pue tu m'aide Sur Vous Plais ci cas ne vous fait pas perdre les temps?

eh!!je peu avoir votre mail adress que je envois cette asssignment il est .pdf

/*
le suivant c'est la class qui fair tous que j'ai reussi avoir
*/
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;

public class SpreadSheetGUI extends JFrame {
 JTable tab;
 JTextField txf,txfcell;
 String [] columnNames={"","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T"};
 String[][] rowdata={
{"1","","","","","","","","","","","","","","","","","","","",""},
   {"2","","","","","","","","","","","","","","","","","","","","",""},
   {"3","","","","","","","","","","","","","","","","","","","",""},
   {"4","","","","","","","","","","","","","","","","","","","",""},
   {"5","","","","","","","","","","","","","","","","","","","",""},
   {"6","","","","","","","","","","","","","","","","","","","",""},
   {"7","","","","","","","","","","","","","","","","","","","",""},
   {"8","","","","","","","","","","","","","","","","","","","",""},
   {"9","","","","","","","","","","","","","","","","","","","",""},
   {"10","","","","","","","","","","","","","","","","","","","",""},
   {"11","","","","","","","","","","","","","","","","","","","",""},
   {"12","","","","","","","","","","","","","","","","","","","",""},
   {"13","","","","","","","","","","","","","","","","","","","",""},
   {"14","","","","","","","","","","","","","","","","","","","",""},
   {"15","","","","","","","","","","","","","","","","","","","",""},
   {"16","","","","","","","","","","","","","","","","","","","",""},
   {"17","","","","","","","","","","","","","","","","","","","",""},
   {"18","","","","","","","","","","","","","","","","","","","",""},
   {"19","","","","","","","","","","","","","","","","","","","",""},
   {"20","","","","","","","","","","","","","","","","","","","",""}};
 DefaultTableModel mymodel;

 public SpreadSheetGUI() {
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setTitle("My SpreadSheet");
  this.setSize(1100, 500);
  this.setLocation(100, 100);
  this.setLayout(null);
  
  txf=new JTextField();
  txf.setBounds(100, 50, 900, 30);
  //txf.setFont(new Font("Arial",Font.BOLD,18));
  this.add(txf);
        mymodel=new DefaultTableModel(rowdata,columnNames);
  
  tab=new JTable(mymodel);
  tab.setFillsViewportHeight(true);
  tab.setCellSelectionEnabled(true);
  tab.setRowSelectionAllowed(false);
  tab.setColumnSelectionAllowed(false);
  tab.setSelectionBackground(Color.CYAN);
  tab.addMouseListener(new myMouseListener());
  txfcell=new JTextField();
  TableColumn tc=tab.getColumnModel().getColumn(0);
  tc.setCellEditor(new DefaultCellEditor(txfcell));
  txfcell.setEditable(false);
  tc.setMaxWidth(20);
 
 
  JScrollPane mypan=new JScrollPane(tab);
  mypan.setBounds(50, 80, 950, 300);
  
  this.add(mypan);
  
  this.setVisible(true);
  
 }
/*le methode qui fait entree les references et les contents du celldans le txtfield*/

public void addCellValueToField(){
  
  int cellposx=tab.getSelectedRow();
  int cellposy=tab.getSelectedColumn();
     int rowreference=tab.getSelectionModel().getLeadSelectionIndex()+1;
     
  String columnreference=tab.getColumnName(cellposy);
  String celltext=tab.getValueAt(cellposx, cellposy).toString();
  String cellrefrence=columnreference+rowreference;
  
  if(celltext.equals("")){
   txf.setText(" = "+cellrefrence);
   txf.setFont(new Font("Arial",Font.BOLD,18));
  }
  else if (cellposy==0){
   txf.setText("The Whole Entire Row : "+rowreference);
   txf.setFont(new Font("Arial",Font.PLAIN,16));
  }
  else {txf.setText(celltext);
  txf.setFont(new Font("Arial",Font.BOLD,18));
  }
 }
 
 public class myMouseListener implements MouseListener {
        public void mouseClicked(MouseEvent e) {
   /*le methode qui fait entree les references et les contents du cell dans le txtfield*/

   addCellValueToField();
  }public void mouseEntered(MouseEvent arg0) {
  }
  public void mouseExited(MouseEvent arg0) {
                }

  public void mousePressed(MouseEvent arg0) {
         }

  public void mouseReleased(MouseEvent arg0) {

  }

 }

}

les suivant c'est le main class qui contient le main methode
import javax.swing.UIManager;

public class SpreadSheetmainClass {

 public static void main(String[] args) {
  try {
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
   
  } catch (Exception e) {
   
   e.printStackTrace();
  }
  SpreadSheetGUI spg= new SpreadSheetGUI();
 }

}

Merci encore du long message
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
4 oct. 2013 à 09:14
Là, je ne comprends rien à ta question, qu'est ce que tu n'arrives pas à faire ?

Et désolé mais je ne communique pas mon adresse mail sur les forums.
0
aminem2080 Messages postés 5 Date d'inscription mardi 1 octobre 2013 Statut Membre Dernière intervention 4 octobre 2013
Modifié par aminem2080 le 4/10/2013 à 20:36
merci encore
c'est que je n'arrive pas a fair c'est fair un methode ou un class
qui faira fonctionne mon programme comme un simple microsoft excel;il faut que mon textfiled accept les formules come
par example (=SUMD4:G4) et mon porgrame prend le contenue du cellule D4 additionner celle dans le E4 et celle dans F4 jusqu'en G4 et donne la some dans une autre cellule selectionner par utulisatuer ou (=A2+D7);mais il ne faut pas que j'utulise d'autre libraries comme openOffice il faut de swing et awt libraries

eh!!mon code la en haut est ce que elle bien ecrite?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
7 oct. 2013 à 08:02
Dans la mesure ou tu n'as pas mis en place d'analyse syntaxique pour résoudre les équations mathématiques, il est impossible de faire ce que tu veux.

Ce n'est pas parce que fonctionnellement ça a l'air simple que ça l'est en vérité. Et dans Swing, tu n'as pas d'objet qui gère ce genre de chose.

Essayes déjà de parser une chaîne du type "6+7" ou 14*2+1" et "1+2*3" et tu verras, il faut que tu découpes en fonction des parenthèses et que tu gères les priorités des opérateurs, et là, il n'y a pas encore de parenthèses ou de fonctions.

Si déjà tu arrives a produire une fonction qui donne le résultat des opérations que j'ai écrites ci-dessus, tu ne seras pas loin de ce que tu veux faire.

Bon courage
0
Rejoignez-nous