2012-02-20 1 views
0

약 60 개의 텍스트 필드에서 데이터를 읽은 다음 간격을두고 줄에 인쇄하는 것이 가장 좋습니다. 예많은 양의 텍스트 필드에서 데이터를 가져 와서 인쇄하는 가장 좋은 방법은 무엇입니까?

에서 System.out.println 들어

(field1.getText() + ""+ field2.getText());

것은, getText() 메소드의 쓰레기로드를 갖고 싶지 않습니다.

그래서 내 주요 질문은이 작업을 수행하는 것이 더 쉽고 (성능면에서) 좋은 방법일까요?

이미지 : 당신은 더 나은 성능을 위해 대신 문자열 연결의 모두 StringBuilder를 사용할 수 my text fields

+0

양식을 만들 때 모음 (지도, 목록 또는 사용자 지정 구조)에 필드를 추가하기 만하면됩니다. 나중에 이것 만 반복하면 ... 스윙에 관한 것일까? – home

답변

1

:

StringBuilder s = new StringBuilder(); 
s.append(field1.getText()).append(" ") 
.append(field2.getText()).append(" ") 
.append(field3.getText()); 
System.out.println(s.toString()); 

그리고 당신의 필드 경우

콜렉션에 저장되었다가 대신 각 호출의 집합을 반복 할 수 개별 필드 :

List<JTextField> fields = new ArrayList<JTextField>(); 
for(int i = 0; i < 30; i++) { 
    fields.add(new JTextField(Integer.toString(i))); 
} 
//... 
StringBuilder s = new StringBuilder(); 
for (JTextField t : fields) { 
    s.append(t.getText()).append(" "); 
} 
//... 
+0

이것은 효과가있었습니다. 감사. 그러나 한 가지 문제가 있습니다. 상자에 데이터를 인쇄하면 인쇄가 계속됩니다. 마찬가지로 1 1 1 1을 인쇄 한 다음 1 1 1 1을 다시 인쇄합니다. – Laszki

+0

코드를 보지 않고 무엇이 잘못되었는지 알기가 어렵습니다. 코드의 관련 부분으로 게시물을 편집하는 것이 좋습니다. 또한 유용하다고 판명 된 답변에 대해 투표를 해 주시면 감사하겠습니다 (http://stackoverflow.com/faq#howtoask). – assylias

0
  1. 필드를 배열 또는 컬렉션에 추가 한 다음 for-each 루프에서 필드를 반복하여 출력합니다. 클래스를 통해

  2. 사용 반사,,, textField.+

  3. 자신의 주석을 쓰기 정규 표현식처럼, 약간의 명명 규칙에 의해 필드를 식별 런타임이 보존 가능한 만들고, 당신이 방문하고자하는 모든 필드에 주석을 반사를 사용하여 클래스 필드를 반복하고, 주석을 확인하고, 주석이 첨부 된 경우 텍스트 필드의 값을 인쇄하십시오.

좋은 명명 규칙/패턴을 사용하면 2.가 최상입니다. 3. 약간 중량급이지만 매우 정확하고 유연합니다. 1. 빠르고 쉬운 해킹입니다.

1

나는 다른 어떤 현명한 더 나은 방법을 생각할 수 없었다. 첫째

,

  • 를 사용하여 텍스트 필드의 배열 또는 목록은 모든 텍스트 필드를 개최합니다. 그런 다음 은 for 루프를 사용하여 반복 할 수 있습니다. whereever

둘째,

  • 사용하여 StringBuilder 가능합니다.
0

리플렉션을 사용해 볼 수 있습니다. 성능 - 현명한하지만 속도가 느려집니다 :

public class Snippet { 

    JTextField field1 = new JTextField("1"); 
    JTextField field2 = new JTextField("2"); 

    JTextField field3 = new JTextField("3"); 
    JTextField field4 = new JTextField("4"); 

    // add more fields here 

    public static void main(String[] args) throws Exception { 
     new Snippet().run(); 
    } 

    private void run() throws Exception { 
     for (int i = 1; i <= 4; i += 2) { 
      JTextField textfieldA = getTextField(i); 
      JTextField textfieldB = getTextField(i + 1); 
      System.out.println(textfieldA.getText() + " " + textfieldB.getText()); 
     } 
    } 

    private JTextField getTextField(int i) throws NoSuchFieldException, IllegalAccessException { 
     Field field = Snippet.class.getDeclaredField("field" + i); 
     JTextField textfield = (JTextField) field.get(this); 
     return textfield; 
    } 
} 

이 신속하고 더러운이며, 장기적으로 (예 : 목록 또는지도) 적절한 데이터 구조로 텍스트 필드를 넣어 더 좋을 것이고, 단순히 반복 .

관련 문제