2015-12-23 2 views
2

Я просто новичок в Java, поэтому я пытаюсь написать простую программу с графическим интерфейсом. Цель программы - подсчитать значение gimatria слова, которое пользователь печатает. Для этого пользователю нужно нажать на кнопку. Я не знаю, как заставить мои методы работать вместе. Я нашел много ответов на вызов метода здесь, но я действительно не понимаю, как реализовать их в моем случае. Вот код:Как заставить мои методы работать вместе

public class Gim { 

public static void main(String[] args) throws IOException { 

    new Display(); 

     } 
} 

public class Display extends JFrame { 

private JButton execute; 
private JTextArea result; 
public JTextField word; 

public Display() { 

    sendTextArea(); 
    sendFrame(); 
    sendButton(); 

} 

public void sendButton() { 

    execute = new JButton(); 
    execute.setBounds(450, 90, 130, 30); 
    execute.addActionListener(new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      if(word.getText() != null){ 


      } 
     } 
    }); 
    add(execute); 
} 

public void sendTextArea() { 
    result = new JTextArea(); 
    word = new JTextField(); 
    result.setBounds(100, 100, 100, 20); 
    word.setBounds(300, 100, 100, 20); 
    result.setEditable(false); 
    word.setEditable(true); 
    word.setFont(new Font("Arial", Font.PLAIN, 10)); 
    result.setFont(new Font("Arial", Font.PLAIN, 10)); 
    add(result); 
    add(word); 
} 

private void sendFrame() { 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setResizable(true); 
    setSize(800, 600); 
    setLocationRelativeTo(null); 
    setLayout(null); 
    setVisible(true); 
} 
} 

public class Count { 

public static int myMethod() throws IOException{ 

     String text; 
     int sum = 0; 
     for(int i = 0; i<text.length(); i++){ 
     char bukv=text.charAt(i); 
     switch(bukv){ 
     case 'א': sum += 1; 
     break; 
     case 'ב': sum += 2; 
     break; 
     case 'ג': sum += 3; 
     break; 
     case 'ד': sum += 4; 
     break; 
     case 'ה': sum += 5; 
     break; 
     case 'ו': sum += 6; 
     break; 
     case 'ז': sum += 7; 
     break; 
     case 'ח': sum += 8; 
     break; 
     case 'ט': sum += 9; 
     break; 
     case 'י': sum += 10; 
     break; 
     case 'כ': sum += 20; 
     break; 
     case 'ל': sum += 30; 
     break; 
     case 'מ': sum += 40; 
     break; 
     case 'נ': sum += 50; 
     break; 
     case 'ס': sum += 60; 
     break; 
     case 'ע': sum += 70; 
     break; 
     case 'פ': sum += 80; 
     break; 
     case 'צ': sum += 90; 
     break; 
     case 'ק': sum += 100; 
     break; 
     case 'ר': sum += 200; 
     break; 
     case 'ש': sum += 300; 
     break; 
     case 'ת': sum += 400; 
     break; 
      } 
     } 
       return sum; 
    } 
} 
+0

Вам не нужно некоторое поле для результата? В любом случае, вы должны вызвать свой метод для вычисления и отображения результата из обработчика события кнопки, который прямо сейчас вы в основном оставили пустым. – RealSkeptic

ответ

0

Обратите внимание, что ActionListener является анонимным классом, который переопределяет метод ActionPerformed. Это то, что в вашей программе «захватывает» пользовательский интерфейс. Здесь вам нужно будет вызвать метод, который учитывает значение gimatria слова, введенного пользователем.

Вы можете достичь этого, вызвав метод, который вы написали: Count.myMethod(). Но этого будет недостаточно, так как у вашего метода нет фактического слова для работы. Поэтому вы должны улучшить свой метод, добавив формальный параметр: myMethod (String word). Теперь вы можете вызвать/вызвать его из метода ActionPerformed с аргументом: Count.myMethod (word). Поскольку этот метод дает результат, вам нужно поймать его: int total = Count.myMethod (word) ;. Этот результат должен отображаться в указанном текстовом поле в вашем GUI: result.setText (String.valueOf (результат);

Вы должны получить что-то вроде:

execute.addActionListener(new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      if(word.getText() != null){ 
       int res = Count.myMethod(word.getText()); 
       result.setText(String.valueOf(res)); 
      } 
     } 
    }); 
    add(execute); 
+0

Спасибо, это работает! – Joe

0

Я думаю, что вы хотите сделать, это:

execute.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       if (word.getText() != null) { 
        try { 
         Count.myMethod(); 
        } catch (IOException e1) { 
         // TODO Auto-generated catch block 
         e1.printStackTrace(); 
        } 
       } 
      } 
     }); 

вместо этого:

execute.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       if (word.getText() != null) { 

       } 
      } 
     }); 

Кнопка создания для выполнения имеет пустой EventHandler. Добавив свой метод в обработчик событий, он будет выполнен. результат может быть сохранен с заменой этого: Count.myMethod(); этим: int i = Count.myMethod();

Вы должны также добавить параметр в myMethod(), чтобы быть в состоянии достигнуть его текст, который вы хотите проверить. Вы можете сделать это так:

public static int myMethod(String toCompare) throws IOException{ 
    String text = toCompare; 
    ... 

Вызов метода тогда будет работать так:

Count.myMethod(yourStringFromUI); 

Надежда, что помогает!

0

Изменить значение Count.myMethod, чтобы разрешить параметр + Удалить «Строковый текст»; Заявление:

public static int myMethod(String paramText) throws IOException{... 

Вызов класса Count из ActionListener дисплея и создать метод, чтобы обработать Ваш результат:

public void actionPerformed(ActionEvent e) { 
     if(word.getText() != null){ 
      display(Count.myMethod(word.getText())); 
     } 
    } 

    public void display(int count){ 
     System.out.println(count); 
    } 
Смежные вопросы