2011-12-28 3 views
0

Я не верю, что это дубликат, потому что другие вопросы касались JButtons и JPanels.setBackground не работает на фоне апплета

мне было интересно, почему следующее Java не работает, как можно было бы предположить:

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

public class Example extends JApplet 
{ 
    public void paint(Graphics page) 
    { 
     setBackground (Color.cyan); 
    } 
} 

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

ответ

3

но я использую примеры из учебника

Избавиться от текста книги. Вы никогда не должны переопределять метод paint() JApplet (это старый метод AWT и не используется с Swing).

Апплеты в Swing - это как приложения в Swing. Вы добавляете компоненты в область содержимого апплета. Пользовательская покраска, если вам нужно сделать, выполняется путем переопределения метода paintComponent() JPanel (или JComponent), а затем вы добавляете панель в область содержимого.

Если вы хотите изменить фон апплета, то вы измените фон области содержимого (или фон панели, которую вы добавляете в ЦЕНТР области содержимого). Что-то вроде:

getContentPane().setBackground(Color.CYAN); 

Этот код будет выполнен в методе init().

Начинать с чтения Swing tutorial. Есть раздел на How to Make Applets и «Выполнение пользовательской живописи».

+0

Вы говорите, что переопределение метода краски - это старая техника awt, будет ли это соответствовать J2SE 5.0? Потому что это единственный пример в книге, где он действительно отменяет метод рисования. Другие примеры, по-видимому, сделаны правильно, просто запутались в том, где я стою, насколько обесцениваются техники. – user1086516

+2

Это не имеет ничего общего с версией Java. Это связано с различием между AWT и Swing. – camickr

Смежные вопросы