Как использовать JFrames или JWindows в массиве - PullRequest
0 голосов
/ 03 декабря 2018

В моем коде я использую более 100 предопределенных JWindows, чтобы поиграть с ними по экрану: показать или скрыть, переместить и т. Д. Определение выглядит так:

    public static JWindow R2 = new JWindow();
    public static JWindow R3 = new JWindow();
    public static JWindow S2 = new JWindow();
    public static JWindow S3 = new JWindow();

    R2.getContentPane().add(s0.labelNow("/testingPackage/" + "R2" + ".jpg"));
    R2.pack();
    R2.setLocation(10, 350);
    R2.setVisible(true);
    R3.getContentPane().add(s0.labelNow("/testingPackage/" + "R3" + ".jpg"));
    R3.pack();
    R3.setLocation(40, 350);
    R3.setVisible(true);
    S2.getContentPane().add(s0.labelNow("/testingPackage/" + "S2" + ".jpg"));
    S2.pack();
    S2.setLocation(550, 750);
    S2.setVisible(true);   etc.

Как вы можете видеть, этоВ результате получился настоящий беспорядок в коде, поэтому мне интересно, могу ли я поместить JWindows в массив или что-то подобное, чтобы я мог использовать что-то вроде 'JWArray [4] [50]' и использовать циклы для объявления, определения, перемещения,показать, скрыть их?

Пожалуйста, найдите код ниже, где я пытаюсь использовать массив JWindows, что приводит к исключению нулевого указателя в строке "JWA [i] .getContentPane (). add".Я предположил, что это объявление JWA [] должно быть неверным.

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;

public class ShowPicture3 extends JPanel {

public static JWindow[] JWA = new JWindow[5];
public static ShowPicture3 s0 = new ShowPicture3();

public JLabel labelNow(String path) {
    ImageIcon imgIcon = new ImageIcon(ShowPicture3.class.getResource(path));
    JLabel label = new JLabel(imgIcon);
    add(label);
    return label;
}

public void prepareImages() {
    for (int i = 0; i < 5; i++) {
        System.out.println("/testingPackage/" + "R" + (i + 2) + ".jpg");
        s0.labelNow("/testingPackage/" + "R" + (i + 2) + ".jpg");
        JWA[i].getContentPane().add(s0.labelNow("/testingPackage/" + "R" + (i + 2) + ".jpg"));
        JWA[i].pack();
        JWA[i].setLocation(10 + i * 20, 350);
        JWA[i].setVisible(true);
    }
}

public static void main(String[] args) throws Exception {
    s0.prepareImages();
    JWA[0].setLocation(100, 750);
    JWA[2].setVisible(false);
}

}

1 Ответ

0 голосов
/ 04 декабря 2018

Вы забыли инициализировать содержимое массива JWA (по умолчанию оно заполнено нулями), просто добавьте "JWA [i] = new JWindow ();"как в примере ниже.

public void prepareImages() {
    for (int i = 0; i < 5; i++) {
        JWA[i] = new JWindow();
        System.out.println("/testingPackage/" + "R" + (i + 2) + ".jpg");
        s0.labelNow("/testingPackage/" + "R" + (i + 2) + ".jpg");
        JWA[i].getContentPane().add(s0.labelNow("/testingPackage/" + "R" + (i + 2) + ".jpg"));
        JWA[i].pack();
        JWA[i].setLocation(10 + i * 20, 350);
        JWA[i].setVisible(true);
    }
}
...