Хочу чтобы фигура шла под панелями - PullRequest
0 голосов
/ 12 июня 2019

Я должен сделать инструмент для рисования, и вот моя проблема

enter image description here

Скриншот другого случая, когда возникает проблема

Так что когдафигура переходит в другую панель, поэтому панель с кнопками и панель с параметрами, я хочу, чтобы фигура была ниже этих панелей

JPanel panel_contenu = new JPanel();
panel_contenu.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(panel_contenu);
panel_contenu.setLayout(null);

JPanel panel_dessin = new JPanel();
panel_dessin.setBounds(0, 139, 1257, 831);
panel_contenu.add(panel_dessin);
panel_dessin.setOpaque(true);

JPanel panel_parametre = new JPanel();
panel_parametre.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
panel_parametre.setBounds(1264, 0, 247, 977);
panel_contenu.add(panel_parametre);
panel_parametre.setLayout(null);

JPanel panel_boutons = new JPanel();
panel_boutons.setBounds(0, 0, 1264, 101);
panel_contenu.add(panel_boutons);
panel_boutons.setLayout(null);

if (cbo_listeobj.getSelectedItem() instanceof Triangle) {
    Triangle t = new Triangle();

    t = (Triangle) cbo_listeobj.getSelectedItem();

    t.deplacer(val_vect_x, val_vect_y);

    repaint();
} // this is when i move a figure

public void paint(Graphics g) {
    super.paintComponents(g);
    Point2D p1 = new Point2D(val_p1_x, val_p1_y);// Commun à toutes les figures

    // TRIANGLE
    if (Btriangle2) {
        Point2D p2 = new Point2D(val_p2_x, val_p2_y);
        Point2D p3 = new Point2D(val_p3_x, val_p3_y);

        Triangle t = new Triangle(p1, p2, p3);
        colltri.add(t);

        listeobj.add(t, cbo_listeobj);

        Btriangle2 = false;
    }
    colltri.afficher(g); //this is when it paint the contentPane

    btnOk.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
        edt_vect_x.setEditable(true);
        edt_vect_y.setEditable(true);
        btnDepl.setEnabled(true);

        if (Btriangle) {
            Btriangle2 = true;
            Btriangle = false;

            val_p1_x = Integer.parseInt(edt_p1_x.getText());
            val_p1_y = Integer.parseInt(edt_p1_y.getText());

            val_p2_x = Integer.parseInt(edt_p2_x.getText());
            val_p2_y = Integer.parseInt(edt_p2_y.getText());

            val_p3_x = Integer.parseInt(edt_p3_x.getText());
            val_p3_y = Integer.parseInt(edt_p3_y.getText());

            repaint();
        } // the ok Button display the figures 

Так что моя главная проблема - когда вы отображаете или перемещаете фигуруфигура проходит через другие панели и не проходит ниже других панелей, вы видите фигуры, проходящие через панели, как на скриншоте.

Я хочу, чтобы фигура была ниже других панелей, когда они отображаются и когда вы перемещаете фигуру с параметрами.У меня есть 4 панели panel_contenu, являющиеся панелью содержимого, и другие панели panel_dessin, panel_parametre и panel_boutons.

1 Ответ

0 голосов
/ 12 июня 2019
  1. Не используйте пустой макет (Swing был разработан для использования с менеджерами по макету)
  2. Не используйте setBounds () (задача разработчика макета - установить размер/ расположение компонентов.
  3. Не переопределять paint ()
  4. Не вызывать paintComponents () напрямую (Swing сделает это).

Произвольная отрисовкаэто делается путем переопределения paintComponent () на JPanel. Прочитайте раздел из учебника Swing по Custom Painting

Затем вы добавляете различные панели в рамку:

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

Итак, основная логика будет такой:

JPanel toolBarPanel = new CustomToolBarPanel();
JPanel paintingPanel = new CustomPaintingPanel();
frame.add(toolBarPanel, BorderLayout.PAGE_START)
frame.add(paintingPanel, BurderLayout.CENTER);

Ссылка на учебник сверху также содержит разделна How to Use BorderLayout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...