Не меняется цвет у компонента JPanel

255
25 января 2018, 19:17

Итак. Есть класс Window(наследник JFrame), у него такой менеджер компоновки:

this.setMinimumSize(new Dimension(350, 200));
    GridBagLayout gridBagLayout = new GridBagLayout();
    gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
    gridBagLayout.rowWeights = new double[]{0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
    getContentPane().setLayout(gridBagLayout);

Табличный то бишь, код сгенерирован IDE(Eclipse). Далее, я создал класс Panel(наследник JPanel):

public class Panel extends JPanel{
    private LinkedList<Figure> figures;
    private GridBagConstraints gbc_panel;
    public Panel(int gridheight, Insets insets, int gridx, int gridy) {
        super();
        gbc_panel = new GridBagConstraints();
        gbc_panel.gridheight = gridheight;
        gbc_panel.insets = insets;
        gbc_panel.fill = GridBagConstraints.BOTH;
        gbc_panel.gridx = gridx;
        gbc_panel.gridy = gridy;
        this.setBorder(BorderFactory.createLineBorder(Color.black, 4));
        this.setOpaque(true);
        this.setBackground(Color.WHITE);
    }
    GridBagConstraints GetGridBagConstraints() {
        return this.gbc_panel;
    }
    public void paintComponent(Graphics g) {
        Dimension dim = getSize(); // размер панели
        Image buf = createImage(dim.width, dim.height); // буфер
        Graphics2D g2 = (Graphics2D) buf.getGraphics(); // теневой буфер
        Oval o = new Oval(20, 20, 190, 190);
        o.DrawPolygon(g2);
        g.drawImage(buf, 0, 0, null);
    }
}

И в классе Window создаю эту панельку:

    MainPanelDraw = new Panel(5, new Insets(0, 0, 5, 5) ,5, 1);
    MainPanelDraw.setBackground(Color.WHITE);
    this.add(MainPanelDraw, 
    MainPanelDraw.GetGridBagConstraints());

Дак вот, все прекрасно работает, фигура отрисовывается, перерисовывается - но Panel не меняет свой цвет на белый. Прозрачность я отключил. В чем моя беда? Спасибо.

Answer 1

Добавь аннотацию @Override и вызови суперкласс:

@Override
    public void paintComponent(Graphics g) {
    super.paintComponent(g);
}
READ ALSO
Использование @PreAuthorize на вложенном методе

Использование @PreAuthorize на вложенном методе

В веб-приложении используется Spring WebMVC и Spring SecurityВозник вопрос, почему не работает аннотация @PreAuthorize, если повесить её на вложенный метод в классе...

354
Как получить данные из Service в класс

Как получить данные из Service в класс

Есть класс который получает данные для фрагмента

285
Hibernate + SQLite не могут создать таблицу

Hibernate + SQLite не могут создать таблицу

В моем проекте необходима база данных SQLite, с которой я буду работать через HibernateРаботаю в Net Beans, ОС Ubuntu 17

239