2016-06-30 3 views
0

내 질문은 나중에 프로그램에서 루프 또는 arraylist 루프에 초기화되는 변수를 추가 할 수 있습니다.나중에 arraylist 또는 루프를 사용하여 배열에 초기화되는 변수 추가

Example: 

JButton btn1, btn2, btn3; 
... 
private void createIco(){ 
    btn1 = new JButton(ico1); // ico1 is a ImageIcon-Object 
    btn2 = new JButton(ico2); 
    btn3 = new JButton(ico3); 
} 
// so i have now the instances of the buttons and now i want them store with 
// a loop in a array or arraylist. 
private void createBtnArray(){ 
    // here a array 
    JButton[] buti = new JButton[3]; 
    //how i can store them ? which loop is good or is this the wrong way to 
    //do ? 
} 

편집 : Thx 지금까지 모두.

예 배열을 만들고이 배열을 사용하면 문제가 없습니다. 내 손으로 모든 일을함으로써 잘 일해도 롤. 하지만 내 포인트 더 같이있다 :

내가 이런 바보 같은 방법으로 많은 개체 만들었 말할 수 있습니다 :

public class Test extends JFrame { 

    private BufferedImage cImg, cImg1, cImg2 cImg3 ............ 
    private ImageIcon ico1, ico2, ico3, ico4, ............... 
    private JButton btn1, bnt2, btn3, btn4, ................ 
    ........... 

    public Test(){ 
     initUI(); 
    } 

    private void initUI(){ 
     // this methods will initialize all objects above 
     loadImg(); 
     cropImg(); 
     createIcon(); 
     createButton(); 
     ............... 
     createArray1(); 
    } 

    public static void main(String[] args){ 
     Test start = new Test(); 
    } 

지금 나는 모든 것을 다시 리메이크 수있어 사용 배열 대신 하나의 개체와 나는 그것을했고 그것이 효과가 있었다. 하지만 나는 그것들을 이미 만들었고 쉬운 루프로 생각했기 때문에 배열이나리스트에 모든 것을 넣을 수 있었고, 다른 배열을 사용하여 다른 객체를 얻을 수 있었기 때문에 이것은 두 배의 작업이라고 생각합니다.

내 소망은 : JButton [] btnAll = new JButton [100]; 그런 다음 루프와 함께 얻을 수있는 모든 인스턴스가 이미 내가 만든 프로그램에서 사용하고 createArray1(), 심지어 내가 정확히 어디 초기화 된 알고 dotn. 나는 그들이 만들어 졌다는 것을 알고 있습니다.

내 다음 단계는 개체 배열에 모든 배열을 다시 배치하여 1 점만 액세스하도록하려는 것입니다. 이처럼 : Object [] all = new Object [3]; 모두 [0] = btnAll; all [1] = icoAll; all [2] = imgAll;

그래서 마지막으로 다음과 같이 보였습니다. JButton test = all [0 [2]];

그래서 포장 된 버전 만 호출 할 수 있습니다.

PS : 네, 배열, 목록에 갈 것이고, 내가이가

+1

왜 처음에는'btn1','btn2' 및'btn3'을 사용하게 되었습니까? 처음부터 배열 (또는 목록)을 사용하기 만하면됩니다. –

+1

별도의 변수가있는 이유는 무엇입니까? 왜 그냥'JButton [] buttons' 필드가 없습니까? –

+0

당신은 정상적으로 저장할 수 있습니다. 'buti [0] = btn1; buti [1] = btn2; buti [2] = btn3;'함수를 사용하면'buti' 변수 클래스 인스턴스를 사용합니다. –

답변

2

찾으면 튜토리얼 다시보고 당신은 당신이 적어도 루프를 사용 (또는 수 없습니다 btn1, btn2 등과 같은 개별 변수가있는 경우 그것은 쉽지 않고 많은 의미를가집니다). 그냥 : 예컨대, 일반적으로

buti[0] = btn1; 
buti[1] = btn2; 
buti[2] = btn3; 

을 추가 또는 직접 배열 초기화 : 즉,

JButton[] buti = new JButton[3]{ btn1, btn2, btn3 }; 

그러나, 당신은 또한 단지 배열을 사용하는 것이 좋습니다를 등 btn1를 제거하고 대신 buti[0]를 사용합니다. 당신은 다음과 같이 초기화 것 : 아직

JButton[] buti; 

private void createIco(){ 
    buti = new JButton[3];  

    buti[0] = new JButton(ico1); // ico1 is a ImageIcon-Object  
    buti[1] = new JButton(ico2); 
    buti[2] = new JButton(ico3); 
} 

또는 더 나은 너무 아이콘의 배열을 전달 :

private void createIco(ImageIcon... icons){ 

    //initialize as many buttons as are available but only up the the number of icons passed 
    int l = Math.min(buti.length, icons.length);  

    for(int i = 0; i < l; i++) { 
    buti[i] = new JButton(icons[i]); 
    }  

    //if there are still buttons missing initialize them without icons 
    for(int i = l; i < buti.length; i++) { 
    buti[i] = new JButton(); 
    } 
} 

편집 :

을 또한 사용에 대해 생각 할 수 있습니다 배열 대신 List<JButton> (그리고 어딘가에 Vector<JButton>이라고 읽은 경우 은 사용 가능한 이유를 이해할 때까지으로 사용하지 마십시오. 배열에 대한 목록의 장점은 다음과 같습니다.

  • 목록이 커질 수 있습니다.시작시 바로 최대 요소 수를 정의 할 필요가 없습니다.
  • 목록 크기를 쿼리 할 수 ​​있습니다. 즉, 목록에 현재 포함 된 항목 수를 확인할 수 있습니다. 배열을 사용하면 얼마나 많은 "슬롯"이 있는지 알 수 있지만 모든 요소를 ​​검사하지 않고 얼마나 많은 원소가 null인지 알지 못하는 반면 목록을 사용하면 null이 아닌 원소 만 추가하고 크기를 확인할 수 있습니다.
  • "구멍"을 만들지 않고 요소를 추가 및 제거하는 것은 구현이이를 처리 할 때 목록에서 더 쉽습니다.
  • 당신이 Collection이 허용 될 때마다
  • 당신은 목록을 사용할 수 있습니다 (LinkedList에서 다시 ArrayList과 즉 스위치) 필요에 따라 실제 구현을 대체 할 수 List<JButton> 인터페이스를 사용하는 경우. 목록

한 가지 단점은 IntList 등이 그를 처리하기 위해 제공하는 라이브러리가의 - 더 - 박스 아웃하지만이 같은 int 같은 프리미티브 작동하지 않는다는 것입니다.

관련 문제