gpt4 book ai didi

java - paintComponent() 绘制 jMenu 和 JToolBar

转载 作者:行者123 更新时间:2023-11-30 07:12:20 25 4
gpt4 key购买 nike

我用 JMenu、JToolBar 和 JPanel 编写了一个小绘图应用程序,问题是,当我开始在面板上绘制时,JMenu 和 JToolBar 绘制在同一个面板上,有时面板的背景变成灰色而不是白色,这是它的样子:java error

这是我的代码: JFrame 代码:

public class ArdoiseF extends JFrame {

private JMenuBar menu = new JMenuBar();
private JToolBar toolbar = new JToolBar();
private JMenu file = new JMenu("Fichier");
private JMenu edit = new JMenu("Edition");
private JMenu about = new JMenu("About");
private JMenu shape = new JMenu("Forme du curseur");
private JMenu color = new JMenu("Couleur du curseur");
private JMenuItem clear = new JMenuItem("Effacer");
private JMenuItem quit = new JMenuItem("Quitter");
private JMenuItem rond = new JMenuItem("Rond");
private JMenuItem carre = new JMenuItem("Carre");
private JMenuItem rouge = new JMenuItem("Rouge");
private JMenuItem bleu = new JMenuItem("Bleu");
private JMenuItem noir = new JMenuItem("Noir");

private JButton rougeButton = new JButton(new ImageIcon("rouge.jpg"));
private JButton bleuButton = new JButton(new ImageIcon("bleu.jpg"));
private JButton noirButton = new JButton(new ImageIcon("noir.jpg"));
private JButton formecarreeButton = new JButton(new ImageIcon("formecarree.png"));
private JButton formerondeButton = new JButton(new ImageIcon("formeronde.png"));

private JPanel container = new JPanel();
private PanneauF pan = new PanneauF();
private ColorListener cListener = new ColorListener();
private ShapeListener shapeListener = new ShapeListener();


public ArdoiseF(){

this.setTitle("Paint -_-");
this.setSize(700,500);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
initComposants();
this.setVisible(true);
}

private void initComposants(){
file.add(clear);
file.addSeparator();
file.add(quit);
file.setMnemonic('F');
clear.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,KeyEvent.CTRL_DOWN_MASK));
quit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,KeyEvent.CTRL_DOWN_MASK));

shape.add(rond);
shape.add(carre);
color.add(rouge);
color.add(bleu);
color.add(noir);

edit.add(shape);
edit.add(color);
edit.setMnemonic('E');

menu.add(file);
menu.add(edit);


toolbar.add(formecarreeButton);
toolbar.add(formerondeButton);
toolbar.addSeparator();
toolbar.add(noirButton);
toolbar.add(rougeButton);
toolbar.add(bleuButton);

clear.addActionListener(new ClearListener());
rougeButton.addActionListener(cListener);
bleuButton.addActionListener(cListener);
noirButton.addActionListener(cListener);
rouge.addActionListener(cListener);
bleu.addActionListener(cListener);
noir.addActionListener(cListener);
formecarreeButton.addActionListener(shapeListener);
formerondeButton.addActionListener(shapeListener);
carre.addActionListener(shapeListener);
rond.addActionListener(shapeListener);

container.setLayout(new BorderLayout());
container.add(toolbar,BorderLayout.NORTH);
container.add(pan,BorderLayout.CENTER);
this.setContentPane(container);

this.setJMenuBar(menu);

}


class ClearListener implements ActionListener{

public void actionPerformed(ActionEvent e) {
pan.setClean(true);
pan.repaint();
}

}
class ColorListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(e.getSource() == rougeButton || e.getSource() == rouge)
pan.setColor(Color.red);
if(e.getSource() == bleuButton || e.getSource() == bleu)
pan.setColor(Color.blue);
if(e.getSource() == noirButton || e.getSource() == noir)
pan.setColor(Color.black);
}
}
class ShapeListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(e.getSource() == formecarreeButton || e.getSource()== carre)
pan.setShape("carre");
if(e.getSource() == formerondeButton || e.getSource()== rond)
pan.setShape("rond");
}

}

}

J面板代码:

public class PanneauF extends JPanel{
private int i=0;
private int mousex=0,mousey=0;
private boolean clean=true;;
private Color color= Color.black;
private String shape = "rond";
ArrayList<Point> points = new ArrayList<Point>();


public PanneauF(){
this.addMouseMotionListener(new MouseMotionListener(){

public void mouseDragged(MouseEvent e) {
points.add(new Point(e.getX()-7,e.getY()-7,15,color,shape));
repaint();

}

public void mouseMoved(MouseEvent arg0) {

}
});
this.addMouseListener(new MouseListener(){

public void mouseClicked(MouseEvent e) {

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public void mousePressed(MouseEvent e) {
points.add(new Point(e.getX()-7,e.getY()-7,15,color,shape));
repaint();

}

public void mouseReleased(MouseEvent e) {

}
});
}
public void paintComponent(Graphics g){
draw(g);
if(clean){
g.setColor(Color.white);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
clean=false;
points = new ArrayList<Point>();
}
}

private void draw(Graphics g){
for (Point p: this.points){
g.setColor(p.getColor());
if(p.getType()=="rond")
g.fillOval(p.getPosx(), p.getPosy(), 10, 10);

else{
g.fillRect(p.getPosx(), p.getPosy(), 10, 10);
}
}
}
public void setClean(boolean c){
this.clean = c;
}
public void setColor(Color c){
this.color = c;
}
public void setShape(String S){
this.shape=S;
}


}

最佳答案

只需在 PanneauF 中的 public void paintComponent(Graphics g) 方法的开头添加 super.paintComponent(g);

了解 customPaintings .

关于java - paintComponent() 绘制 jMenu 和 JToolBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20472007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com