Je veux dessiner dans le canevas de Java mais je ne peux pas le faire fonctionner parce que je ne sais pas ce que je fais. Voici mon code simple:
import javax.swing.JFrame;
import Java.awt.Canvas;
import Java.awt.Graphics;
import Java.awt.Color;
public class Program
{
public static void main(String[] args)
{
JFrame frmMain = new JFrame();
frmMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmMain.setSize(400, 400);
Canvas cnvs = new Canvas();
cnvs.setSize(400, 400);
frmMain.add(cnvs);
frmMain.setVisible(true);
Graphics g = cnvs.getGraphics();
g.setColor(new Color(255, 0, 0));
g.drawString("Hello", 200, 200);
}
}
Rien n'apparaît sur la fenêtre.
Ai-je tort de penser que Canvas est un papier et Graphics est mon crayon? Est-ce ainsi que cela fonctionne?
Suggestions:
getGraphics()
sur un composant car l'objet Graphics obtenu sera transitoire.paintComponent()
de JPanel.Liens clés du didacticiel:
Vous devez remplacer la méthode Paint(Graphics g)
de votre Canvas et y effectuer votre dessin. Voir la documentation Paint ().
Comme il l'indique, l'opération par défaut consiste à effacer le canevas, de sorte que votre appel à l'objet graphique du canevas ne fonctionne pas comme prévu.
Pourquoi la première façon ne fonctionnerait-elle pas. L'objet Canvas est créé et la taille est définie et les graphiques sont définis. Je trouve toujours ça étrange. De plus, si une classe étend JComponent, vous pouvez remplacer le
paintComponent(){
super...
}
et puis ne devriez-vous pas être en mesure de créer et d'instance de la classe à l'intérieur d'une autre classe, puis appelez simplement NewlycreateinstanceOfAnyClass.repaint();
J'ai essayé cette approche pour certains programmes de jeu sur lesquels j'ai travaillé et cela ne semble pas fonctionner comme je le pense.
Doug Hauf
Les éléments suivants devraient fonctionner:
public static void main(String[] args)
{
final String title = "Test Window";
final int width = 1200;
final int height = width / 16 * 9;
//Creating the frame.
JFrame frame = new JFrame(title);
frame.setSize(width, height);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);
//Creating the canvas.
Canvas canvas = new Canvas();
canvas.setSize(width, height);
canvas.setBackground(Color.BLACK);
canvas.setVisible(true);
canvas.setFocusable(false);
//Putting it all together.
frame.add(canvas);
canvas.createBufferStrategy(3);
boolean running = true;
BufferStrategy bufferStrategy;
Graphics graphics;
while (running) {
bufferStrategy = canvas.getBufferStrategy();
graphics = bufferStrategy.getDrawGraphics();
graphics.clearRect(0, 0, width, height);
graphics.setColor(Color.GREEN);
graphics.drawString("This is some text placed in the top left corner.", 5, 15);
bufferStrategy.show();
graphics.dispose();
}
}