Как получить уникальный графический контекст для встроенных графических компонентов? - PullRequest
1 голос
/ 29 ноября 2011

Рассмотрим случай, когда у меня есть объект JFrame и JPanel с объектом JPanel, встроенным в JFrame.Насколько я понимаю, у каждого графического компонента был свой графический контекст.Так что мой JFrame имеет свой собственный графический контекст, а мой JPanel имеет свой собственный графический контекст, и эти контексты различны.Я собрал небольшой тест, который, кажется, подразумевает иное:

    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    frame.add(panel);

    Graphics frameContext = frame.getGraphics();
    Graphics panelContext = panel.getGraphics();

    if (frameContext == panelContext){
        System.out.println("The contexts are the same.");
    } else {
        System.out.println("The contexts are different.");
    }

Вывод «Контексты одинаковые».Почему это так?Возможно ли иметь различный графический контекст для JPanel и JFrame?Я хочу рисовать в графическом контексте JPanel, но не в контексте JFrame.

Этот вопрос относится к Неправильному JPanel, отображаемому в CardLayout.Проблемы с getGraphics () .Я считаю, что ответ на этот вопрос может как-то решить другой.

1 Ответ

1 голос
/ 29 ноября 2011

Ничего себе.Тупая ошибка с моей стороны.Тест на равенство возвращал значение true, поскольку оба были нулевыми.

Код должен быть изменен на:

    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    frame.add(panel);
    frame.setVisible(true);

    Graphics frameContext = frame.getGraphics();
    Graphics panelContext = panel.getGraphics();        

    if (frameContext.equals(panelContext)){
        System.out.println("The contexts are the same.");
    } else {
        System.out.println("The contexts are different.");
    }

После этой модификации вывод теста будет следующим: «Контексты разные»Поэтому это не отвечает на вопрос на Неправильная JPanel отображается в CardLayout.Проблемы с getGraphics () .

...