Почему панель не окрашена? - PullRequest
3 голосов
/ 21 октября 2011

КОД

import javax.swing.*;
import java.awt.*;

class tester {
   public static void main(String args[]) {
     JFrame fr = new JFrame();
     JPanel p = new JPanel();
     p.setBackground(Color.RED);
     p.paintImmediately(20,20,500,500);  
     fr.add(p);
     fr.setVisible(true);
     fr.setSize(2000,2000);
  }
}

Я получаю панель, полностью окрашенную в красный цвет. Почему я не получаю линию? Как я могу получить это?

1 Ответ

8 голосов
/ 21 октября 2011

Панель полностью окрашена в красный цвет.

Это потому, что вы установили фон и больше ничего не делалиживопись ...

Почему я не понимаю?Как я могу получить это?

Это не способ сделать это.Почему вы звоните paintImmediately?Вот что говорится в документации:

Окрашивает указанную область в этом компоненте и всех его потомках, которые перекрывают регион, немедленно.

редко нужно вызывать этометод .В большинстве случаев более эффективно вызывать перерисовку, которая откладывает фактическое рисование и может объединять избыточные запросы в один вызов рисования.Этот метод полезен, если необходимо обновить отображение во время отправки текущего события.

Я предлагаю вам ознакомиться с рисованием в AWT / Swing.


Чтобы получить что-то вроде этого

enter image description here

, вы можете изменить свой код следующим образом:

JFrame fr = new JFrame();
JPanel p = new JPanel() {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(20, 20, 500, 500);
    }
};
p.setBackground(Color.RED);
fr.add(p);
fr.setVisible(true);
fr.setSize(200, 200);
...