2012-02-19 5 views
2

의 JTextArea를 채우는 것은 클래스입니다. 텍스트 영역은 배열의 마지막 객체 만 가져옵니다. 배열의 모든 객체를 표시하려면 JTextArea가 필요합니다. 배열 문제를 해결했지만 내 단추를 배열을 검색하는 방법을 알아낼 수 없습니다. 내 드라이버 클래스에 actionlistener를 구현하고 싶습니다만 정적 오류가 발생하고 java가 최종 결과물을 만들려고하지만 문제가 해결되지 않습니다. 내 문제를 알리기 위해 코드를 업데이트했습니다.다른 클래스의 배열에서 버튼이있는

public class drink 
{ 
private String name; 
private String carb; 
private String desc; 

public drink(String drinkName, String carbDetail, String descDetail) 
{ 
    name = drinkName; 
    carb = carbDetail; 
    desc = descDetail; 

} 
public String toString() 
{ 
    return(name + carb + desc); 
} 

} 


public class drinkViewer 
{ 
private String string; 
private String name; 
private drink[] theDrinks; 
private int drinkCount=0; 



public drinkViewer(String Name) 
{ 
    name = Name; 
    theDrinks = new drink[5]; 

} 
public void addDrink(String drinkName, String carbDetail, String descDetail) 
{ 
    theDrinks[drinkCount] = new drink(drinkName, carbDetail, descDetail); 
    drinkCount++; 

} 
public void getdrinkArray() 
{ 
    for(int i=0;i<drinkCount;i++) 
     { 
      string += (theDrinks[i].toString()+"\n"); 
      //System.out.println(string); 
     } 
} 


}//end 

import java.awt.BorderLayout; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.ButtonGroup; 
import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.border.EtchedBorder; 
import javax.swing.border.TitledBorder; 
import javax.swing.JTextArea; 

public class driver 
{ 
private JTextArea area; 


public static void main(String args[]) 
{ 
    drinkViewer newViewer = new drinkViewer("test"); 
    newViewer.addDrink("orange", "fruit", "noncarb"); 
    newViewer.addDrink("beer", "5%","carb"); 
    newViewer.loop(); 
    //JTextArea area = new JTextArea(newViewer.getString()); 
    JFrame frame = new JFrame("Drink Descriptions"); 
    frame.setVisible(true); 
    frame.setSize(400,400); 
    JButton button = new JButton("Button"); 
    JPanel panel = new JPanel(); 
    frame.add(panel,BorderLayout.NORTH); 
    panel.add(button,BorderLayout.NORTH); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    panel.add(area,BorderLayout.SOUTH); 

     class ButtonListener implements ActionListener 
    { 
     public void actionPerformed (ActionEvent event) 
     { 
      JTextArea area = new JTextArea(newViewer.getdrinkArray()); 
     } 
    } 

    listener = new ButtonListener(); 

     } 

     }//end 
+1

나는 해결책을 제공하고, 그것을 검토하고, 에러를 피하기 위해 drinkViewer 생성자 내부의 문자열을 초기화한다. – Juvanis

답변

3

변경도 string += (theDrinks[i].toString()+"\n");

하고 loop() 방법 string = (theDrinks[i].toString()+"\n");

에서이 라인은 그렇지 않으면 당신은 당신의 출력 null...을 볼 수 string = "";drinkViewer 생성자 내부에 string 변수를 초기화합니다.

+0

gak! 너무 느린. 귀하의 빠른 답변을 위해 1+ 이상. 내 사정을 삭제하려고. –

+0

죄송합니다. 당신은 정확합니다, 다시 한번 감사드립니다. – newbKen

+0

죄송합니다. 나는 stackoverflow에 새로운 있습니다. 이 모든 것이 +1 무엇에 관한 것입니까? – newbKen

3

String이 아닌 인 경우 StringBuilder 또는 StringBuffer을 추가 할 수 있습니다.

public void loop(){ 
    StringBuilder s = new StringBuilder(); 
    for(int i=0;i<drinkCount;i++){ 
     s.append(theDrinks[i].toString()).append("\n"); 
     //System.out.println(theDrinks[i].toString() + "\n"); 
    } 
    string = s.toString(); 
} 

public String getString(){ 
    return string; 
} 
}//end 

그것은 각 음료를 추가 :이 시도

string.append(theDrinks[i].toString()+"\n"); 

다음은 getString()

+1

이것은 1+ 이상에서 작동하지만 간단한 문자열 연결은 여기에서 잘 작동합니다. StringBuffer 또는 StringBuilder를 사용하면 (특히) 세 가지 항목 문자열 배열의 경우 조기에 최적화 될 것으로 보입니다. –

2

return 성명에서 string.toString()을 부를 것이다 :

string = (theDrinks[i].toString()+"\n"); 

은 변경 것 문자열은 StringBuilder입니다.

+0

이것은 아름답게 작동했습니다! 고맙습니다. 자바에 익숙하지 않습니다. 전에는 문자열 빌더에 대해 들어 본 적이 없습니다. – newbKen

+2

문자열 추가/연결에 대한보다 효율적인 대안입니다. 여기에 대한 설명이 있습니다. 1) http://goo.gl/Ewmt4 2) http://goo.gl/AJuS7 3) http://goo.gl/X1hQ8 – rtheunissen

관련 문제