У меня проблемы с выяснением, почему возникает следующая проблема: В программе, использующей "extends Frame
" для создания окна, я могу использовать BufferedImage для рисования в графическом контексте фрейма (не JFrame), иэто выглядит просто отлично.Однако в тот момент, когда я объявляю JPanel
, весь текст, нарисованный BufferedImage
, становится неясным (не полностью, но полупрозрачным и трудным для чтения), даже если я не добавляю JPanel
к JFrame
.
Вот упрощенная версия кода:
import java.awt.*;
import java.awt.event.*;
import javax.swing.Timer;
import java.awt.image.*;
import javax.swing.*;
public class MyProgram extends Frame {
static Frame f;
static Timer timer;
public static void main(String[] args) {
f = new Frame();
f.setSize(400, 200);
f.setResizable(false);
f.setVisible(true);
f.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
drawScreen();
}
});
drawScreen();
}
public static void drawScreen() {
BufferedImage off_i = new BufferedImage(f.getWidth(), f.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = off_i.createGraphics();
g.setColor(new Color(50, 50, 50));
g.drawString("Hit any key; why does this text change?", 15, f.getHeight() - 10);
Graphics off_g = f.getGraphics();
off_g.drawImage(off_i, 0, 0, null);
JPanel panel = new JPanel();
}
}
Я мог бы понять, что возникла проблема, если бы я добавил JPanel
к JFrame
и не сделал 'Я не могу установить никаких границ его видимости, но даже создание JPanel
дает эту проблему, которая мне кажется странной.
По сути, я пытаюсь сделать существующую программу, которая у меня есть.прекрасно работает без JPanel
, и я хочу добавить к нему JTextArea
, чтобы я мог принимать копирование / вставку текста для изменения отображения программы.
Мое понимание Java немного нечеткоеКак я узнал, главным образом, из хобби, а не формально, но я всегда стараюсь узнать больше, когда смогу.Спасибо за помощь!
Обновление: я обнаружил, что эта проблема возникает только при повторном вызове функции draw после объявления JPanel, хотя я до сих пор не понимаю, почему она это делает иликак обойти это.