2011-10-13 2 views
0

Je dois coder une simple calculatrice avec une interface utilisateur dans une classe et un modèle dans une autre, mais comment puis-je accéder directement aux données d'une autre classe? par exemple? si j'appuie sur 123, j'obtiendrai du texte tel que le résultat null123? Aidez-moi s'il vous plaît? comment puis-je optimiser mon code, où j'ai des erreurs?Pourquoi cette entrée est-elle si nulle?

Voir classe:

package calc; 

import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.KeyEvent; 
import org.eclipse.swt.events.KeyListener; 
import org.eclipse.swt.events.SelectionEvent; 
import org.eclipse.swt.events.SelectionListener; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Text; 
import org.eclipse.ui.part.ViewPart; 
import org.eclipse.wb.swt.SWTResourceManager; 

public class View extends ViewPart { 
    public Text inputText; 
    public Text inputText2; 
    public Calculation calcul; 

    public View() 
    { 
     calcul = new Calculation(); 
    } 

    public void createPartControl(Composite parent) { 
     Composite mainComposite = new Composite(parent, SWT.NONE); 
     GridLayout gltop = new GridLayout(1, false);   
     gltop.numColumns = 1;  
     mainComposite.setLayout(gltop); 
     //mainComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLUE)); 
     //ВЫзов верхнего и нижнего композита 
     createTop(mainComposite); 
     createBott(mainComposite);  
    } 

    private void createTop(Composite parent) 
    { 
     GridLayout gltop = new GridLayout(1, false);   
     gltop.numColumns = 1; 
     GridData data = new GridData(GridData.FILL_HORIZONTAL);  
     Composite topComposite = new Composite(parent, SWT.NONE);  
     topComposite.setLayout(gltop); 
     topComposite.setLayoutData(data); 
     //topComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_RED)); 

     inputText = new Text(topComposite, SWT.NONE); 
     inputText.setLayoutData(data); 
     inputText.setFont(SWTResourceManager.getFont("", 18, SWT.BOLD)); 
    } 

    private void createBott(Composite parent) 
    { 
     GridLayout glbot = new GridLayout(1, false);   
     glbot.numColumns = 2; 
     GridData data = new GridData(GridData.FILL_BOTH);  
     Composite botComposite = new Composite(parent, SWT.NONE);  
     botComposite.setLayout(glbot); 
     botComposite.setLayoutData(data); 
     //botComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_YELLOW));  


     createLeft(botComposite);  
     createRight(botComposite);  
    } 

    private void createLeft(Composite parent) 
    {   
     Composite leftComposite = new Composite(parent, SWT.NONE); 
     GridLayout glleft = new GridLayout(1, false);  
     GridData data = new GridData(GridData.FILL_HORIZONTAL); 
     glleft.marginTop = 26; 
     leftComposite.setLayout(glleft); 
     leftComposite.setLayoutData(data); 
     //leftComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_CYAN)); 

     inputText2 = new Text(leftComposite, SWT.BORDER_SOLID); 
     inputText2.setText("Hi"); 
     Button buttonMC = createFuncDigButtons(leftComposite, data, "MC", 'M'); 
     Button buttonMR = createFuncDigButtons(leftComposite, data, "MR", 'R'); 
     Button buttonMS = createFuncDigButtons(leftComposite, data, "MS", 'S'); 
     Button buttonMpl = createFuncDigButtons(leftComposite, data, "MC", 'P'); 
    } 

    private void createRight(Composite parent) 
    { 
     GridLayout glright = new GridLayout(1, false);  
     GridData data = new GridData(GridData.FILL_BOTH);  
     Composite rightComposite = new Composite(parent, SWT.NONE);  
     glright.numColumns = 1; 
     rightComposite.setLayout(glright); 
     rightComposite.setLayoutData(data); 
     //rightComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_DARK_GREEN)); 

     createRightTop(rightComposite); 
     createRightBot(rightComposite); 
    } 

    private void createRightTop(Composite parent) 
    { 
     Composite rightTopComposite = new Composite(parent, SWT.NONE); 
     GridLayout glltop = new GridLayout(1, false);  
     GridData data = new GridData(GridData.FILL_BOTH); 
     glltop.numColumns = 3; 
     glltop.marginBottom = 0; 
     glltop.marginTop = 0; 
     rightTopComposite.setLayout(glltop); 
     rightTopComposite.setLayoutData(data); 
     //rightTopComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_DARK_MAGENTA)); 

     Button buttonBack = createFuncDigButtons(rightTopComposite, data, "Backspace", 'B'); 
     Button buttonC = createFuncDigButtons(rightTopComposite, data, "C", 'C'); 
     Button buttonCE = createFuncDigButtons(rightTopComposite, data, "CE", 'E'); 
    } 

    private void createRightBot(Composite parent) 
    { 
     GridLayout glright = new GridLayout(1, false);  
     GridData data = new GridData(GridData.FILL_BOTH);  
     Composite rightBotComposite = new Composite(parent, SWT.NONE);  
     glright.numColumns = 5; 
     rightBotComposite.setLayout(glright); 
     rightBotComposite.setLayoutData(data); 
     //rightBotComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_DARK_GREEN));  
     Button button7 = createFuncDigButtons(rightBotComposite, data, "7", '7'); 
     Button button8 = createFuncDigButtons(rightBotComposite, data, "8", '8'); 
     Button button9 = createFuncDigButtons(rightBotComposite, data, "9", '9'); 
     Button buttonDev = createFuncDigButtons(rightBotComposite, data, "/", '/'); 
     Button buttonSQRT = createFuncDigButtons(rightBotComposite, data, "sqrt", 'R'); 
     Button button4 = createFuncDigButtons(rightBotComposite, data, "4", '4'); 
     Button button5 = createFuncDigButtons(rightBotComposite, data, "5", '5'); 
     Button button6 = createFuncDigButtons(rightBotComposite, data, "6", '6'); 
     Button buttonMult = createFuncDigButtons(rightBotComposite, data, "*", '*'); 
     Button buttonPer = createFuncDigButtons(rightBotComposite, data, "%", '%'); 
     Button button1 = createFuncDigButtons(rightBotComposite, data, "1", '1'); 
     Button button2 = createFuncDigButtons(rightBotComposite, data, "2", '2'); 
     Button button3 = createFuncDigButtons(rightBotComposite, data, "3", '3'); 
     Button buttonMinus = createFuncDigButtons(rightBotComposite, data, "-", '-'); 
     Button buttonDev1 = createFuncDigButtons(rightBotComposite, data, "1/x", '1'); 
     Button button0 = createFuncDigButtons(rightBotComposite, data, "0", '0'); 
     Button buttonPM = createFuncDigButtons(rightBotComposite, data, "+/-", 'p'); 
     Button buttonD = createFuncDigButtons(rightBotComposite, data, ".", '.');  
     Button buttonPlus = createFuncDigButtons(rightBotComposite, data, "+", '+');   
     Button buttonR = createFuncDigButtons(rightBotComposite, data, "=", '='); 
    } 

    public Button createFuncDigButtons(Composite parent, GridData gridData, final String digit, final char formethod) 
    { 
     Button button = new Button(parent, SWT.PUSH); 
      button.setLayoutData(gridData); 
      button.setText(String.valueOf(digit)); 
      button.addSelectionListener(new SelectionListener() { 
      @Override 
      public void widgetSelected(SelectionEvent arg0) { 
      // update(formethod); 
       calcul.getDigit(formethod); 
       inputText.setText(calcul.num1); 
       System.out.println("f " + calcul.num1); 
      } 

      @Override 
      public void widgetDefaultSelected(SelectionEvent arg0) { 
       /* do nothing */ 
      } 
      }); 
      button.addKeyListener(new KeyListener() { 

      @Override 
      public void keyReleased(KeyEvent arg0) { 
      } 

      @Override 
      public void keyPressed(KeyEvent arg0) { 
       calcul.getDigit(arg0.character); 
      } 
     }); 
     return button; 
    } 

    public void setFocus() { 
    } 
} 

et classe pseudomodel:

package calc; 

public class Calculation { 

    public String num1; 
    public String num2; 

    public Calculation() 
    { 
    } 

    public char getDigit(char a) 
    { 
     char value = a; 
     switch (a) { 
     case 'q': 

      break; 

     default: 
      num1 += value; 
      break; 
     } 
     System.out.println("getbyclass" + a + "bb" +num1); 
     return value;  
    } 
} 

Aidez-moi s'il vous plaît, becouse j'ai besoin d'aide pour comprendre

+0

aussi est le moyen le plus facile de calculer dans un tel ordre: je presse 1 + 2 tous obtenir le texte 3, je presse * 2 j'obtiendrai 6 et ainsi de suite? Moyen facile? –

Répondre

3

initialiser les chaînes de num1 et NUM2 à ""

sinon les chaînes sont définies sur null et lorsque vous c oncatenate que par une autre chaîne, il obtient à "null"

parsé
0

Cela vous aidera:

dans votre fonction createFuncDigButtons changer le 3ème argument de final String digit-final char digit et passer dans un caractère.

dans votre gestionnaire keyPressed changer cette ligne

calcul.getDigit(arg0.character); 

à cette

calcul.getDigit(digit); 

Vous devez également initialiser vos variables de chaîne dans votre constructeur Calculation.

+0

J'ai besoin de ceci pour le texte du bouton, et le caractère pour les méthodes –

+0

@JohnSmith Vous n'avez pas besoin de transmettre une chaîne. String.valueOf a une surcharge pour un caractère. –

Questions connexes