Donc, fondamentalement, j'ai du code sur lequel je travaillais il y a quelques jours, qui est un peu comme Paint, qui vous permet de dessiner essentiellement sur l'écran en utilisant la souris. J'ai en quelque sorte découvert cette propriété par hasard, et je me suis rendu compte que c'était vraiment inefficace et je me demande s'il y a un moyen plus pratique de le faire. Il n'y a pas vraiment de raison de donner tout mon code, mais voici les parties importantesUne façon plus facile de faire une application de peinture en Java?
private static void createAndShowGui() {
SimpleDraw mainPanel = new SimpleDraw();
MenuBar.createMenuBar();
JLabel label = new JLabel();
label.setText("Drawing prototype 0.0.1");
// label.setHorizontalTextPosition(JLabel.NORTH);
label.setFont(new Font("Serif", Font.BOLD, 20));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(),BoxLayout.PAGE_AXIS));
frame.setVisible(true);
frame.setJMenuBar(MenuBar.getMenuBar());
frame.setBackground(Color.WHITE);
frame.add(label);
Le bloc de code ci-dessus définit la JFrame (la fenêtre)
@Override
public void mouseDragged(MouseEvent e)
{
// These console outputs are just so that I know what is happening
System.out.println("Event: MOUSE_DRAG");
System.out.println(e.getX());
System.out.println(e.getY());
System.out.println(e.getComponent());
System.out.println(e.getWhen());
System.out.println(e.getButton());
MOUSE_X = e.getX() - 5; //-5 so that the cursor represents the center of the square, not the top left corner.
MOUSE_Y = e.getY() - 5; //^
rect = new Rectangle(MOUSE_X, MOUSE_Y, 10, 10); //This doesn't ever come into action.
repaint();
}
Le code ci-dessus assez il suffit de définir les variables MOUSE_X et MOUSE_Y et repaint(); méthode
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if (rect != null) {
if (!colorChoice.equals("Default"))
{
g2.setColor(Color.BLACK);
}
switch(colorChoice) {
case "GRAY":
g2.setColor(Color.GRAY);
break;
case "CYAN":
g2.setColor(Color.CYAN);
break;
case "BLUE":
g2.setColor(Color.BLUE);
break;
case "RED":
g2.setColor(Color.RED);
break;
case "PINK":
g2.setColor(Color.PINK);
break;
case "YELLOW":
g2.setColor(Color.YELLOW);
break;
case "GREEN":
g2.setColor(Color.GREEN);
break;
case "PURPLE":
g2.setColor(Color.MAGENTA);
break;
case "RESET":
g2.setColor(Color.WHITE);
case "WHITE":
g2.setColor(Color.WHITE);
}
g2.fillRect(MOUSE_X, MOUSE_Y, 15, 15);
if (colorChoice.equals("RESET"))
resetColorOnCursor();
}
}
public static void clearBoard()
{
tempColor = colorChoice;
setColorChoice("RESET");
frame.repaint();
}
public static void resetColorOnCursor()
{
setColorChoice(tempColor);
}
C'est la chose que j'ai rencontrée accidentellement. Ce que j'essayais de faire quand je l'ai trouvé était de faire un carré suivre votre curseur chaque fois que vous avez déplacé votre souris. Mais j'ai oublié de taper la partie code paintComponent(g);
, ce qui fait de ce programme la chose que j'avais initialement prévue. Les parties inférieures de ce sont essentiellement comment je voudrais effacer le tableau. Je suis sûr à 100% que ce n'est pas la bonne façon d'effacer/réinitialiser un cadre comme celui-ci, mais je ne pouvais pas trouver un autre moyen. Si quelqu'un a des conseils ou de meilleures méthodes à utiliser pour le faire correctement, je serais très reconnaissant. Merci! : D
Nope, vous devriez appeler 'super.paintComponent' avant de peindre l'état actuel du composant. Sinon, vous pourriez vous retrouver avec toutes sortes de dégâts apparaissant sur votre composant, comme les autres images fantômes de votre composant, par exemple – MadProgrammer
Pour "mettre" la vue en pause, laissez les valeurs qui déterminent comment ou quoi est peint avant d'appeler 'repeindre ' – MadProgrammer
super.paintComponent(); fait un carré mobile. C'est ce que je ne veux pas. Je ne voulais pas rendre l'aspect dessin plus efficace. Appel de super.paintComponent(); Va retourner ce programme dans l'application ennuyeuse "carré mobile" –