Рисование прямоугольников на JPanel - PullRequest
2 голосов
/ 11 октября 2011

У меня есть JScrollPane, и поверх него у меня есть JPanel с именем 'panel1'.Я хочу, чтобы на этом JPanel были нарисованы некоторые прямоугольники.

У меня есть класс с именем DrawRectPanel, который расширяет JPanel и выполняет все операции рисования.Проблема в том, что я попытался нарисовать прямоугольники на панели 1, написав следующий код:

panel1.add(new DrawRectPanel());

, но ничего не появилось на панели 1, тогда я попытался, просто как тест для класса DrawRectPanel:

JFrame frame = new JFrame();
frame.setSize(1000, 500);
Container contentPane =    frame.getContentPane();
contentPane.add(new DrawRectPanel());
frame.show();

Это сработало и произвело рисунки, но на отдельном JFrame. Как я могу нарисовать прямоугольники на панели1?Заранее спасибо.

РЕДАКТИРОВАТЬ: код для DrawRectPanel

public class DrawRectPanel extends JPanel  {

    DrawRectPanel() {
        Dimension g = new Dimension(400,400);
        this.setPreferredSize(g);
        System.out.println("label 1");
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        System.out.println("label 2");
        g.setColor(Color.red);
        g.fillRect(20, 10, 80, 30);
    }
 }

только этикетка 1 печатается на экране

Ответы [ 3 ]

2 голосов
/ 11 октября 2011

до сих пор не знаю,

например

enter image description here

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class CustomComponent extends JFrame {

    private static final long serialVersionUID = 1L;

    public CustomComponent() {
        setTitle("Custom Component Graphics2D");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void display() {
        add(new CustomComponents());
        pack();
        // enforces the minimum size of both frame and component        
        setMinimumSize(getSize());
        setVisible(true);
    }

    public static void main(String[] args) {
        CustomComponent main = new CustomComponent();
        main.display();
    }
}

class CustomComponents extends JComponent {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(100, 100);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 300);
    }

    @Override
    public void paintComponent(Graphics g) {
        int margin = 10;
        Dimension dim = getSize();
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
    }
}
1 голос
/ 11 октября 2011

вместо добавления

contentPane.add(new DrawRectPanel());

вы должны сделать

contentPane.add(panel1);

, поскольку у вас уже есть новый DrawRectPanel в панели1.Но в вашем коде вы добавляете еще один экземпляр DrawRectPanel в contentPane.И никогда не добавлял panel1 ни в один из ваших container.

0 голосов
/ 30 ноября 2015

, чтобы исправить вашу проблему, замените «paintComponent» на «paint», когда окно перерисовывается автоматически, оно должно работать.

...