Je travaille sur un travail de devoirs où je suis censé faire un programme qui te permet de peindre des formes et des lignes faites sur commande, et les déplace autour de l'écran. À l'origine, j'utilisais la peinture de vide publique (g) pour peindre, mais les formes scintillaient lorsque j'appelais repeindre. À cause de cela, je suis passé à paintComponent (g) à cause de cela. Cependant quand j'essaye de peindre une forme rien ne se montre. Je crois que c'est parce qu'il ne peint pas sur mon Jpanel.PaintComponent ne peignant pas sur JPanel [Homework]
mon cadre a 3 Jpanels dans un borderLayout à 3 rangées.
[Bouton JPanel]
[Draw Box JPanel]
[Coordinate JPanel]
Le panneau, je voudrais attirer sur est le tirage Box JPanel naturellement.
Voici le code que j'ai actuellement
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
public class Main extends JPanel implements ActionListener, MouseListener, MouseMotionListener {
private String colors[] = { "Black", "Red", "Orange", "Yellow", "Green", "Blue" };
private String shapes[] = { "Ellipse", "Line", "Rectangle" };
private JMenuBar toolBar; // flow layout? OR box layout x-Axis
private JPanel drawBox;
private JPanel coordBox;
private JLabel coords;
private JButton undo = new JButton("Undo");
private JButton clear = new JButton("Clear");
private JComboBox color = new JComboBox(colors);
private JComboBox shape = new JComboBox(shapes);
private JCheckBox fill = new JCheckBox("Filled");
public Main() {
JFrame frame = new JFrame("Paint");
frame.setSize(400, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setLayout(new BorderLayout());
/*
* SETUP TOOLBAR
*/
toolBar = new JMenuBar();
toolBar.setLayout(new GridLayout(1, 5));
toolBar.add(undo);
toolBar.add(clear);
toolBar.add(color);
toolBar.add(shape);
toolBar.add(fill);
/*
* ADD ACTION LISTENERS TO BUTTONS
*/
undo.addActionListener(this);
clear.addActionListener(this);
color.addActionListener(this);
shape.addActionListener(this);
fill.addActionListener(this);
/*
* SETUP DRAW BOX
*/
drawBox = new JPanel();
drawBox.setOpaque(true);
drawBox.setPreferredSize(new Dimension(600, 400));
drawBox.addMouseListener(this);
drawBox.addMouseMotionListener(this);
/*
* SETUP COORDINATES
*/
coords = new JLabel();
coordBox = new JPanel();
coordBox.setBackground(new Color(211, 211, 211));
coordBox.setPreferredSize(new Dimension(drawBox.getWidth(), 25));
coords.setText("Coords: [0,0]");
coords.addMouseMotionListener(this);
coordBox.add(coords);
/*
* ADD TO FRAME
*/
frame.add(toolBar, BorderLayout.NORTH);
frame.add(drawBox, BorderLayout.CENTER);
frame.add(coordBox, BorderLayout.SOUTH);
frame.pack();
}
public static void main(String[] args) {
Main m = new Main();
}
public void paintComponent(Graphics g) {
// super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(300, 300, 100, 100);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == undo) {
System.out.println("Undo Last");
}
if (e.getSource() == clear) {
System.out.println("clearing screen");
}
// COLOR DROP DOWN BOX
if (e.getSource() == color) {
JComboBox cb = (JComboBox) e.getSource();
String selected = (String) cb.getSelectedItem();
switch (selected) {
case "Red":
System.out.println("switching to color red");
//ellipse.setColor(Color.RED);
break;
case "Orange":
System.out.println("switch to coor orange");
//ellipse.setColor(Color.ORANGE);
break;
case "Yellow":
System.out.println("switching to color yellow");
break;
case "Green":
System.out.println("Switching to green");
//ellipse.setColor(Color.GREEN);
break;
case "Blue":
System.out.println("Switching to blue");
break;
default:
System.out.println("NOthing selected");
break;
}
}
// SHAPE DROP DOWN BOX
if (e.getSource() == shape) {
JComboBox cb = (JComboBox) e.getSource();
String selected = (String) cb.getSelectedItem();
switch (selected) {
case "Ellipse":
System.out.println("switching to ellipse");
break;
case "Line":
System.out.println("switch to line");
break;
case "Rectangle":
System.out.println("switching to rectangle");
break;
default:
System.out.println("NOthing selected");
break;
}
}
if (e.getSource() == fill) {
JCheckBox cb = (JCheckBox) e.getSource();
if (cb.isSelected()) {
System.out.println("Fill shape");
//ellipse.setFilled(true);
} else {
System.out.println("Empty shape");
//ellipse.setFilled(false);
}
}
}
@Override
public void mouseClicked(MouseEvent arg0) {
// System.out.println("Mouse clicked");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("Mouse entered");
}
@Override
public void mouseExited(MouseEvent arg0) {
coords.setText("Coords: N/A");
}
@Override
public void mousePressed(MouseEvent arg0) {
System.out.println("Mouse pressed");
}
@Override
public void mouseReleased(MouseEvent arg0) {
System.out.println("Mouse Released");
}
@Override
public void mouseDragged(MouseEvent e) {
coords.setText("Coords: [" + e.getX() + "," + e.getY() + "]");
}
@Override
public void mouseMoved(MouseEvent e) {
coords.setText("Coords: [" + e.getX() + "," + e.getY() + "]");
// repaint();
// revalidate();
}
}
Merci, cela a semblé fonctionner. Je me suis débarrassé du drawBox JPanel tous ensemble et j'ai ajouté 'ceci' au cadre à la place. – GreenFerret95