Как поместить объект в панель? - PullRequest
0 голосов
/ 28 ноября 2018

Итак, у меня есть список объектов со случайным ростом и весом.У меня также есть случайное число этих объектов в переменную.

Я пытаюсь напечатать все эти объекты на правильной панели (у меня есть 2 панели).

Во-первых, мой GUI и класс Object (Blocks) - это два отдельных класса.В GUI я делаю это:

    private JPanel initPanelBloc() {
    panelBloc = new JPanel();
    bloc = new Bloc(false);
    panelBloc.add(bloc);
    return panelBloc;
    }

Мой класс Bloc:

public class Bloc extends JPanel{
private int hauteur, largeur, nombreBloc;
private boolean premierPassage = true;
private ArrayList<Bloc> listeBlocRestant;
private Random rand = new Random();

public Bloc(boolean premierPassage) {
    this.hauteur = 10 + rand.nextInt(50 - 10);
    this.largeur = 10 + rand.nextInt(50 - 10);      
    listeBlocRestant = new ArrayList<Bloc>();
    if(premierPassage == true) {
        this.nombreBloc = 5 + rand.nextInt(30 - 5);
        insererBlocList();
    }
}

public ArrayList<Bloc> insererBlocList(){
    premierPassage = false;
    for(int i=0; i<nombreBloc; i++) {       
        Bloc bloc = new Bloc(false);
        listeBlocRestant.add(bloc);
    }
    return listeBlocRestant;
}

public void paintComponent(Graphics2D g) {
    Graphics2D g2 = (Graphics2D) g;
    g2.fillRect(10, 20, this.largeur, this.hauteur);   
}

У меня также есть 3-й класс, где я вызываю класс GUI:

    public Optimisation() {
    this.aff = new InterfaceGraphique();
}

И это в вышеприведенном классе, где мне нужно делать то, что я хочу.

Я не писал в этом, что я хочу делать, потому что я все еще не знаю, как это сделать.Должен ли я создать для каждого цикла и взять список блоков и для каждого блока, я хочу, чтобы они печатались на панели с изменением x и y (в fillRect) между блоками?Я действительно потерян, я пытался думать об этом вчера, но до сих пор не понимаю ...

Сердечно

1 Ответ

0 голосов
/ 28 ноября 2018

Я потерян, лол. Я там не все понимаю, потому что с помощью щелчка и т. Д.

Ну, щелчки действительно не имеют отношения к концепции рисования.

Концепция рисования заключается в том, что вы сохраняете объект, который хотите рисовать, в ArrayList.Затем в методе paintComponent () вы перебираете ArrayList для рисования каждого объекта.

В моем примере у вас есть метод addRectangle(...), который добавляет один объект Rectangle за раз.Вы можете вручную добавить прямоугольник, вызвав этот метод без использования мыши.Это позволяет вам добавлять прямоугольники другого размера / местоположения / цвета.

Например, вы просто меняете код следующим образом:

private static void createAndShowGUI()
{
    DrawingArea drawingArea = new DrawingArea();
    drawingArea.addRectangle(new Rectangle(10, 10, 200, 100), Color.RED);
    drawingArea.addRectangle(new Rectangle(210, 110, 20, 100), Color.BLUE);

Теперь при запуске команды появится красный прямоугольник.код.

Ключевые моменты:

  1. вам нужен способ добавить объект, который вы хотите нарисовать, в свой класс
  2. , затем вам нужно раскрасить эти объекты в своем классе.метод paintComponent ().Вы не можете жестко закодировать рисование так, как вы это делаете в настоящее время.

В вашем коде ваш Bloc объект должен будет содержать информацию, необходимую для рисования блока.

...