[英]mouse Clicked event change colors
这个程序的目标是创建一个靶心。 当您在面板上单击时,它将使靶心的颜色从红色变为蓝色。 当您单击我的时,什么也不会发生。 是什么原因造成的?
import java.awt.*;
public class TargetLogoPanel extends javax.swing.JPanel {
public Color ringColor = Color.RED;
public int size = 400;
public TargetLogoPanel() {
setBackground(Color.WHITE);
setPreferredSize(new Dimension(700,400 ));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int width = getWidth();
int height = getHeight();
int radius = getHeight();
g.setColor(ringColor);
g.fillOval(
(int)((width/2 ) - (radius * 0.3)),
(int)((height/2) - (radius * 0.3)),
(int)(radius * .6),
(int)(radius * .6));
g.setColor(Color.WHITE);
g.fillOval(
(int)((width / 2) - (radius * 0.22)),
(int)((height / 2) - (radius * 0.22)),
(int)(radius * 0.44),
(int)(radius * 0.44));
g.setColor(ringColor);
g.fillOval(
(int)((width / 2) - (radius * 0.15)),
(int)((height / 2) - (radius * 0.15)),
(int)(radius * 0.3),
(int)(radius * 0.3));
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
formMouseClicked(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
}// </editor-fold>
private void formMouseClicked(java.awt.event.MouseEvent evt) {
if(ringColor == Color.RED){
ringColor = Color.BLUE;
repaint();
} else{
ringColor = Color.RED;
repaint();
}
}
// Variables declaration - do not modify
// End of variables declaration
}
在面板的构造函数中调用initComponents()
。
public TargetLogoPanel() {
initComponents();
setBackground(Color.WHITE);
setPreferredSize(new Dimension(700, 400));
}
经测试:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
/**
* @see http://stackoverflow.com/a/22548923/230513
*/
public class Test {
private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new TargetLogoPanel());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
class TargetLogoPanel extends javax.swing.JPanel {
public Color ringColor = Color.RED;
public int size = 400;
public TargetLogoPanel() {
initComponents();
setBackground(Color.WHITE);
setPreferredSize(new Dimension(700, 400));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int width = getWidth();
int height = getHeight();
int radius = getHeight();
g.setColor(ringColor);
g.fillOval(
(int) ((width / 2) - (radius * 0.3)),
(int) ((height / 2) - (radius * 0.3)),
(int) (radius * .6),
(int) (radius * .6));
g.setColor(Color.WHITE);
g.fillOval(
(int) ((width / 2) - (radius * 0.22)),
(int) ((height / 2) - (radius * 0.22)),
(int) (radius * 0.44),
(int) (radius * 0.44));
g.setColor(ringColor);
g.fillOval(
(int) ((width / 2) - (radius * 0.15)),
(int) ((height / 2) - (radius * 0.15)),
(int) (radius * 0.3),
(int) (radius * 0.3));
}
/**
* This method is called from within the constructor to initialize the
* form. WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
formMouseClicked(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
}// </editor-fold>
private void formMouseClicked(java.awt.event.MouseEvent evt) {
if (ringColor == Color.RED) {
ringColor = Color.BLUE;
repaint();
} else {
ringColor = Color.RED;
repaint();
}
}
// Variables declaration - do not modify
// End of variables declaration
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test().display();
}
});
}
}
本质上,您尚未注册MouseListener
来响应鼠标事件。
Netbeans表单编辑器创建的initComponents
方法用于注册MouseListener
,但是您停止了对其的调用。
尝试在组件的构造函数中调用initComponents
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.