在Java中,Repaint()不调用paint()
首先,我要说,我知道我在这乱七八糟的代码中违反了一些基本的Java原则,但我正拼命想在周二之前完成一个社会科学实验的程序,我不懂Java,所以我现在基本上只是在摸索 有了这个免责声明,我有了一个单独的程序,其中一个圆圈在屏幕上移动,用户必须点击它。当它在自己单独的类文件中时,它可以正常工作,但是当我将代码添加到主程序时,它就不再工作了。我甚至不明白为什么repaint()调用我的paint()函数——就我而言,这很神奇,但我注意到repaint()在我的测试程序中调用了paint(),但在更复杂的实际程序中却没有,我想这就是为什么圆不再在我的程序上绘制的原因 整个代码如下:在Java中,Repaint()不调用paint(),java,swing,jpanel,repaint,graphics2d,Java,Swing,Jpanel,Repaint,Graphics2d,首先,我要说,我知道我在这乱七八糟的代码中违反了一些基本的Java原则,但我正拼命想在周二之前完成一个社会科学实验的程序,我不懂Java,所以我现在基本上只是在摸索 有了这个免责声明,我有了一个单独的程序,其中一个圆圈在屏幕上移动,用户必须点击它。当它在自己单独的类文件中时,它可以正常工作,但是当我将代码添加到主程序时,它就不再工作了。我甚至不明白为什么repaint()调用我的paint()函数——就我而言,这很神奇,但我注意到repaint()在我的测试程序中调用了paint(),但在更复杂
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.io.FileReader;
import java.io.IOException;
import java.util.Calendar;
public class Reflexology1 extends JFrame{
private static final long serialVersionUID = -1295261024563143679L;
private Ellipse2D ball = new Ellipse2D.Double(0, 0, 25, 25);
private Timer moveBallTimer;
int _ballXpos, _ballYpos;
JButton button1, button2;
JButton movingButton;
JTextArea textArea1;
int buttonAClicked, buttonDClicked;
private long _openTime = 0;
private long _closeTime = 0;
JPanel thePanel = new JPanel();
JPanel thePlacebo = new JPanel();
final JFrame frame = new JFrame("Reflexology");
final JFrame frame2 = new JFrame("The Test");
JLabel label1 = new JLabel("Press X and then click the moving dot as fast as you can.");
public static void main(String[] args){
new Reflexology1();
}
public Reflexology1(){
frame.setSize(600, 475);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Reflexology 1.0");
frame.setResizable(false);
frame2.setSize(600, 475);
frame2.setLocationRelativeTo(null);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setTitle("Reflexology 1.0");
frame2.setResizable(false);
button1 = new JButton("Accept");
button2 = new JButton("Decline");
//movingButton = new JButton("Click Me");
ListenForAcceptButton lForAButton = new ListenForAcceptButton();
ListenForDeclineButton lForDButton = new ListenForDeclineButton();
button1.addActionListener(lForAButton);
button2.addActionListener(lForDButton);
//movingButton.addActionListener(lForMButton);
JTextArea textArea1 = new JTextArea(24, 50);
textArea1.setText("Tracking Events\n");
textArea1.setLineWrap(true);
textArea1.setWrapStyleWord(true);
textArea1.setSize(15, 50);
textArea1.setEditable(false);
FileReader reader = null;
try {
reader = new FileReader("EULA.txt");
textArea1.read(reader, "EULA.txt");
} catch (IOException exception) {
System.err.println("Problem loading file");
exception.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException exception) {
System.err.println("Error closing reader");
exception.printStackTrace();
}
}
}
JScrollPane scrollBar1 = new JScrollPane(textArea1, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
AdjustmentListener listener = new MyAdjustmentListener();
thePanel.add(scrollBar1);
thePanel.add(button1);
thePanel.add(button2);
frame.add(thePanel);
ListenForMouse lForMouse = new ListenForMouse();
thePlacebo.addMouseListener(lForMouse);
thePlacebo.add(label1);
frame2.add(thePlacebo);
ListenForWindow lForWindow = new ListenForWindow();
frame.addWindowListener(lForWindow);
frame2.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e){
if(e.getKeyChar() == 'X' || e.getKeyChar() == 'x') {moveBallTimer.start();}
}
});
frame.setVisible(true);
moveBallTimer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
moveBall();
System.out.println("Timer started!");
repaint();
}
});
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if(frame2.isVisible()){ moveBallTimer.start(); }
}
});
}
private class ListenForAcceptButton implements ActionListener{
public void actionPerformed(ActionEvent e){
if (e.getSource() == button1){
Calendar ClCDateTime = Calendar.getInstance();
System.out.println(ClCDateTime.getTimeInMillis() - _openTime);
_closeTime = ClCDateTime.getTimeInMillis() - _openTime;
//frame.getContentPane().remove(thePanel);
//thePlacebo.addKeyListener(lForKeys);
//frame.getContentPane().add(thePlacebo);
//frame.repaint();
//moveBallTimer.start();
frame.setVisible(false);
frame2.setVisible(true);
frame2.revalidate();
frame2.repaint();
}
}
}
private class ListenForDeclineButton implements ActionListener{
public void actionPerformed(ActionEvent e){
if (e.getSource() == button2){
JOptionPane.showMessageDialog(Reflexology1.this, "You've declined the license agreement. DO NOT RESTART the program. Please go inform a researcher that you have declined the agreement.", "WARNING", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
}
private class ListenForWindow implements WindowListener{
public void windowActivated(WindowEvent e) {
//textArea1.append("Window is active");
}
// if this.dispose() is called, this is called:
public void windowClosed(WindowEvent arg0) {
}
// When a window is closed from a menu, this is called:
public void windowClosing(WindowEvent arg0) {
}
// Called when the window is no longer the active window:
public void windowDeactivated(WindowEvent arg0) {
//textArea1.append("Window is NOT active");
}
// Window gone from minimized to normal state
public void windowDeiconified(WindowEvent arg0) {
//textArea1.append("Window is in normal state");
}
// Window has been minimized
public void windowIconified(WindowEvent arg0) {
//textArea1.append("Window is minimized");
}
// Called when the Window is originally created
public void windowOpened(WindowEvent arg0) {
//textArea1.append("Let there be Window!");
Calendar OlCDateTime = Calendar.getInstance();
_openTime = OlCDateTime.getTimeInMillis();
//System.out.println(_openTime);
}
}
private class MyAdjustmentListener implements AdjustmentListener {
public void adjustmentValueChanged(AdjustmentEvent arg0) {
AdjustmentEvent scrollBar1;
//System.out.println(scrollBar1.getValue()));
}
}
public void paint(Graphics g) {
//super.paint(g);
frame2.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.RED);
g2d.fill(ball);
System.out.println("Calling fill()");
}
protected void moveBall() {
//System.out.println("I'm in the moveBall() function!");
int width = getWidth();
int height = getHeight();
int min, max, randomX, randomY;
min =200;
max = -200;
randomX = min + (int)(Math.random() * ((max - min)+1));
randomY = min + (int)(Math.random() * ((max - min)+1));
//System.out.println(randomX + ", " + randomY);
Rectangle ballBounds = ball.getBounds();
//System.out.println(ballBounds.x + ", " + ballBounds.y);
if (ballBounds.x + randomX < 0) {
randomX = 200;
} else if (ballBounds.x + ballBounds.width + randomX > width) {
randomX = -200;
}
if (ballBounds.y + randomY < 0) {
randomY = 200;
} else if (ballBounds.y + ballBounds.height + randomY > height) {
randomY = -200;
}
ballBounds.x += randomX;
ballBounds.y += randomY;
_ballXpos = ballBounds.x;
_ballYpos = ballBounds.y;
ball.setFrame(ballBounds);
}
public void start() {
moveBallTimer.start();
}
public void stop() {
moveBallTimer.stop();
}
private class ListenForMouse implements MouseListener{
// Called when the mouse is clicked
public void mouseClicked(MouseEvent e) {
//System.out.println("Mouse Panel pos: " + e.getX() + " " + e.getY() + "\n");
if (e.getX() >=_ballXpos && e.getX() <= _ballXpos + 25 && e.getY() <=_ballYpos && e.getY() >= _ballYpos - 25 ) {
System.out.println("TRUE");
}
System.out.println("{e.getX(): " + e.getX() + " / " + "_ballXpos: " + _ballXpos + " | " + "{e.getY(): " + e.getY() + " / " + "_ballYpos: " + _ballYpos);
}
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
// System.out.println("e.getX(): " + e.getX() + " / " + "_ballXpos: " + _ballXpos);
// Mouse over
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
// Mouse left the mouseover area:
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Rectangle;
导入javax.swing.*;
导入java.awt.event.*;
导入java.awt.geom.Ellipse2D;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.Calendar;
公共类Reflexology1扩展了JFrame{
私有静态最终长serialVersionUID=-1295261024563143679L;
私人Ellipse2D ball=新的Ellipse2D.Double(0,0,25,25);
私人定时器;
国际巴利波斯;
b按钮1、按钮2;
按钮移动按钮;
JTextArea textArea1;
int按钮单击,按钮单击;
私有长时间_openTime=0;
私有长时间_closeTime=0;
JPanel thePanel=新的JPanel();
JPanel thePlacebo=新的JPanel();
最终JFrame=新JFrame(“反射学”);
最终JFrame 2=新JFrame(“测试”);
JLabel label1=新JLabel(“按X键,然后尽可能快地单击移动点”);
公共静态void main(字符串[]args){
新的反射学1();
}
公共反射学1(){
框架设置尺寸(600475);
frame.setLocationRelativeTo(空);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。设置标题(“反射学1.0”);
frame.setresizeable(false);
框架2.设置尺寸(600475);
frame2.setLocationRelativeTo(空);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架2.设置标题(“反射学1.0”);
frame2.可设置大小(false);
按钮1=新的按钮(“接受”);
按钮2=新按钮(“拒绝”);
//movingButton=新建按钮(“单击我”);
ListenForAcceptButton lForAButton=新建ListenForAcceptButton();
ListenFordClineButton lForDButton=新建ListenFordClineButton();
button1.addActionListener(lForAButton);
按钮2.addActionListener(lForDButton);
//movingButton.addActionListener(lForMButton);
JTextArea textArea1=新的JTextArea(24,50);
textArea1.setText(“跟踪事件”);
textArea1.setLineWrap(true);
textArea1.setWrapStyleWord(true);
文本区域1.设置大小(15,50);
textArea1.setEditable(false);
FileReader=null;
试一试{
reader=新文件阅读器(“EULA.txt”);
textArea1.read(读卡器,“EULA.txt”);
}捕获(IOException异常){
System.err.println(“加载文件时出现问题”);
异常。printStackTrace();
}最后{
if(读卡器!=null){
试一试{
reader.close();
}捕获(IOException异常){
System.err.println(“错误关闭读取器”);
异常。printStackTrace();
}
}
}
JScrollPane scrollBar1=新的JScrollPane(textArea1,JScrollPane.VERTICAL\u SCROLLBAR\u根据需要,JScrollPane.HORIZONTAL\u SCROLLBAR\u从不);
AdjustmentListener=新的MyAdjustmentListener();
面板添加(滚动条1);
面板添加(按钮1);
面板添加(按钮2);
框架。添加(面板);
ListenForMouse lForMouse=新建ListenForMouse();
Placebo.addMouseListener(用于鼠标);
添加位置(标签1);
框架2.添加(Placebo);
ListenForWindow lForWindow=新建ListenForWindow();
frame.addWindowListener(lForWindow);
frame2.addKeyListener(新的KeyAdapter(){
按下公共无效键(按键事件e){
如果(e.getKeyChar()='X'| | e.getKeyChar()='X'){moveBallTimer.start()}
}
});
frame.setVisible(true);
moveBallTimer=新计时器(1000,新ActionListener(){
已执行的公共无效操作(操作事件e){
移动球();
System.out.println(“计时器已启动!”);
重新油漆();
}
});
addKeyListener(新的KeyAdapter(){
按下公共无效键(按键事件e){
如果(frame2.isVisible()){moveBallTimer.start();}
}
});
}
私有类ListenForAcceptButton实现ActionListener{
已执行的公共无效操作(操作事件e){
如果(例如getSource()==button1){
Calendar ClCDateTime=Calendar.getInstance();
System.out.println(ClCDateTime.getTimeInMillis()-\u openTime);
_closeTime=ClCDateTime.getTimeInMillis()-\u openTime;
//frame.getContentPane().remove(面板);
//Placebo.addKeyListener(lForKeys);
//frame.getContentPane().add(Placebo);
//frame.repaint();
//moveBallTimer.start();
frame.setVisible(假);
frame2.setVisible(true);
frame2.revalidate();
frame2.repaint();
}
}
}
私有类ListenFordClineButton实现ActionListener{
已执行的公共无效操作(操作事件e){
如果(例如getSource()==按钮2){
JOptionPane.showMessageDialog(Reflexology1.this,“您已拒绝许可协议。请勿重新启动程序。请通知研究员您已拒绝协议。”,“警告”,JOptionPane.INFORMATION_消息);
系统出口(0);
}
}
}
私有类ListenForWindow实现WindowListener{
公共无效窗口已激活(WindowEvent e){
//text区域1.附加(“窗口i
class TestPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.RED);
g2d.fill(ball);
}
}
JPanel thePlacebo = new TestPanel();
thePlacebo.repaint();
package so;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Ellipse2D;
import java.util.Random;
import javax.swing.*;
public class TestBall {
private static void createAndShowUI() {
final TestPanel panel = new TestPanel();
panel.validate();
JFrame frame = new JFrame("TestBall");
frame.getContentPane().add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(300, 300));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
ActionListener timerAction = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
panel.moveBall();
}
};
Timer timer = new Timer(1000, timerAction);
timer.setRepeats(true);
timer.start();
}
static class TestPanel extends JPanel {
public static int BALL_SIZE = 25;
private Ellipse2D ball = new Ellipse2D.Double(0, 0, BALL_SIZE,
BALL_SIZE);
Random rand = new Random();
public TestPanel() {
this.addMouseListener(new MouseAdapter() {
// Called when the mouse is clicked
public void mouseClicked(MouseEvent e) {
if (ball.contains(e.getPoint())) {
System.out.println("hit the ball");
}
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.RED);
g2d.fill(ball);
}
public void moveBall() {
Rectangle ballBounds = ball.getBounds();
ball.setFrame(ballBounds);
ballBounds.x = rand.nextInt(getWidth() - BALL_SIZE + 1) + 1;
ballBounds.y = rand.nextInt(getHeight() - BALL_SIZE + 1) + 1;
ball.setFrame(ballBounds);
repaint();
}
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}