2016-06-30 1 views
0

Мой вопрос в том, как я могу добавить переменные, которые затем инициализируются в программе массивом или arraylist с помощью цикла.Добавление переменных, которые инициализируются позже в arraylist или array с помощью цикла

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 пока все.

Да, создание массива и использование этого массива отлично работают. Также отлично работал, делая все своими руками lol. Но моя точка зрения больше похожа на это:

Допустим, я сделал много объектов в глупом образом, как это:

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(), даже я точно знаю, где они точно инициализированы. Я просто знаю, что они сделаны.

И мой следующий шаг был, я хотел снова положить все эти массивы в массив объектов, чтобы получить доступ только к форме 1 балл. Например: Object [] all = new Object [3]; все [0] = btnAll; все [1] = icoAll; все [2] = imgAll;

Так что я наконец-то хотел выглядеть так: JButton test = all [0 [2]];

поэтому я могу назвать только упакованную версию.

PS: да я пойду на массив, список и так далее учебник еще раз, чтобы увидеть, если я нахожу это там

+1

Почему у вас есть 'btn1',' btn2' и 'btn3' в первую очередь? Просто используйте массив (или список) с самого начала. –

+1

Почему у вас есть отдельные переменные? Почему не просто поле 'JButton [] кнопок? –

+0

вы можете нормально хранить, 'buti [0] = btn1; бути [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(); 
    } 
} 

Редактировать:

Вы также можете подумать об использовании a List<JButton> вместо массива (и если вы читаете Vector<JButton> где-то: не используйте его, пока не поймете, почему он по-прежнему доступен). Вот некоторые преимущества списков по массивам:

  • Списки могут расти, т. Е.вам не нужно определять максимальное количество элементов в самом начале.
  • Вы можете запросить список по его размеру, то есть проверить количество элементов, которые в настоящее время содержатся в списке. С массивом вы только знаете, сколько «слотов» есть, но вы не знаете, сколько из них не равно null, не проверяя все элементы, а в списках вы можете добавлять только ненулевые элементы, а затем проверять размер.
  • Добавление и удаление элементов без создания «отверстий» проще с помощью списков в качестве дескрипторов реализации.
  • Если вы используете интерфейс List<JButton> вы можете заменить фактическую реализацию в зависимости от потребностей (т.е. переключатель от LinkedList к ArrayList и обратно)
  • Вы можете использовать списки всякий раз, когда Collection допускается.

Одним из недостатков списков является то, что они не работают с примитивов, таких как int вне коробки, но есть библиотеки, которые предоставляют IntList и т.д., чтобы справиться с этим.

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