2016-02-27 10 views
1

У меня есть класс BossInfo, который расширяет JPanel и имеет несколько компонентов, таких как JLabel, JTextField. Мой основной метод находится в другом файле («DamageCalculator»). В принципе, значение вводится в JTextField через прослушиватель действий, и я хотел бы передать это значение в другой файл (использовать его в вычислениях). У меня много проблем с логикой. Вот мой класс:Возвращает значение для использования в разных классах

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class BossInfo extends JPanel { 

    private JLabel  bossLabel, resultLabel; 
    private JTextField bossHp; 
    String bossHpText = new String(""); 
    int valRecd = 0; 

    public BossInfo() { 
     //Labels 
     bossLabel = new JLabel("Boss HP: (Hit Enter to set)"); 
     resultLabel = new JLabel("---"); 
     //Text field for user input of boss hp 
     bossHp = new JTextField(15); 
     bossHp.addActionListener(new TempListener()); 

     //add components 
     add(bossLabel); 
     add(bossHp); 
     add(resultLabel); 

    } //end BossInfo object 

    public void setVal(int valRecd) { 
     this.valRecd = valRecd; 
    } 

    private class TempListener implements ActionListener { 
     public void actionPerformed(ActionEvent event) {    
      int hp; 
      bossHpText = bossHp.getText(); 
      hp = Integer.valueOf(bossHpText); 
      dc.setVal(hp); 
      resultLabel.setText(bossHpText); 
     }//end action performed 
    }//end TempListener 
} //end class BossInfo 

Как использовать bossHpText в другом классе? «ActionPerformed» сходит с ума, если это какой-либо тип возврата, отличный от void, поэтому я не уверен, что он должен что-то вернуть.

EDIT: Код обновлен на основе предложений.

+0

Вы можете иметь публичную переменную в другой класс, получает изменение actionPerformed() – WIR3D

+0

Ahh, интересно. Итак, скажем, я просто хочу напечатать значение bossHpText из основного метода: Открытый класс DamageCalculator extends Frame { Строковый результат = новый String(); \t public static void main (String [] args) { result = actionPerformed(); System.out.print (результат); } } Ugh, извините, не понимали, что форматирование отличается для комментариев. – TommyWhom

ответ

1

Имейте переменную valRecd в MainClass.

на вашем actionPerformed, вызовите метод установки для этого valRecd, например,

MainClass obj = new MainClass(); //in your constructor. 

public void actionPerformed(ActionEvent event) { 
     int hp; 
     bossHpText = bossHp.getText(); 
     hp = Integer.parseInt(text); 
     obj.setVal(hp);     //add this line. 
     resultLabel.setText(bossHpText); 
} 

где setVal может быть что-то вроде этого:

public void setVal(int valRecd) { 
    this.valRecd = valRecd; 
} 
+0

Когда вы скажете MainClass, это будет класс с моим основным методом? Кроме того, спасибо за быстрый ответ! – TommyWhom

+0

Да. Класс с основным методом, где вы выполняете вычисления. –

+0

Ahh хорошо. Поэтому метод setVal входит в класс BossInfo, потому что именно там он определен. Я добавил изменения, предложенные в методе actionPerformed. В какой класс входит конструктор «MainClass»? Поэтому я правильно понимаю, мы создаем переменную в основном классе. Затем в классе BossInfo мы меняем значение этой переменной? – TommyWhom

Смежные вопросы