题目:怎么让矩形顺着我画的线溜下来,鼠标按下,拖动画线,松开鼠标后,产生一矩形,顺着线段跑一圈,以下为我的代码,但是有点问题,看不到跑的过程,只是在线的末尾添加了一矩形.import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;import command.MyFrameUitl;class ActionPanel extends JPanel {
JButton jbYellow;
JButton jbGreen;
JButton jbRed; public ActionPanel() {
jbYellow = new JButton("Yellow Ctrl+Y");
jbGreen = new JButton("Green Ctrl+G");
jbRed = new JButton("Red Ctrl+R");
MyActionButtonEvent mbe = new MyActionButtonEvent();
jbYellow.addActionListener(mbe);
jbGreen.addActionListener(mbe);
jbRed.addActionListener(mbe);
MyActionKeyEvent mke = new MyActionKeyEvent();
jbYellow.addKeyListener(mke);
jbGreen.addKeyListener(mke);
jbRed.addKeyListener(mke);
this.add(jbYellow);
this.add(jbGreen);
this.add(jbRed);
}
//键盘监听器
private class MyActionKeyEvent extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_Y && e.isControlDown()){
setBackground(Color.YELLOW);
}else if(keyCode == KeyEvent.VK_G && e.isControlDown()){
setBackground(Color.GREEN);
}else if(keyCode == KeyEvent.VK_R && e.isControlDown()){
setBackground(Color.RED);
}
}
} //点击监听器
private class MyActionButtonEvent implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JButton jb = (JButton) e.getSource();
if (jb == jbYellow) {
setBackground(Color.YELLOW);
} else if (jb == jbGreen) {
setBackground(Color.GREEN);
} else if (jb == jbRed) {
setBackground(Color.RED);
}
}
}
}class ActionFrame extends JFrame {
public ActionFrame() {
add(new ActionPanel());
setSize(700,500);
setVisible(true); }
}public class ActionTest {
public static void main(String[] args) {
new ActionFrame();
}
}
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;import command.MyFrameUitl;class ActionPanel extends JPanel {
JButton jbYellow;
JButton jbGreen;
JButton jbRed; public ActionPanel() {
jbYellow = new JButton("Yellow Ctrl+Y");
jbGreen = new JButton("Green Ctrl+G");
jbRed = new JButton("Red Ctrl+R");
MyActionButtonEvent mbe = new MyActionButtonEvent();
jbYellow.addActionListener(mbe);
jbGreen.addActionListener(mbe);
jbRed.addActionListener(mbe);
MyActionKeyEvent mke = new MyActionKeyEvent();
jbYellow.addKeyListener(mke);
jbGreen.addKeyListener(mke);
jbRed.addKeyListener(mke);
this.add(jbYellow);
this.add(jbGreen);
this.add(jbRed);
}
//键盘监听器
private class MyActionKeyEvent extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_Y && e.isControlDown()){
setBackground(Color.YELLOW);
}else if(keyCode == KeyEvent.VK_G && e.isControlDown()){
setBackground(Color.GREEN);
}else if(keyCode == KeyEvent.VK_R && e.isControlDown()){
setBackground(Color.RED);
}
}
} //点击监听器
private class MyActionButtonEvent implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JButton jb = (JButton) e.getSource();
if (jb == jbYellow) {
setBackground(Color.YELLOW);
} else if (jb == jbGreen) {
setBackground(Color.GREEN);
} else if (jb == jbRed) {
setBackground(Color.RED);
}
}
}
}class ActionFrame extends JFrame {
public ActionFrame() {
add(new ActionPanel());
setSize(700,500);
setVisible(true); }
}public class ActionTest {
public static void main(String[] args) {
new ActionFrame();
}
}
解决方案 »
- webService服务端启动报错
- 高分求一个多表统计的SQL,来者有分,有答案马上结贴
- 算数问题,请高手~~~
- 在crontab中应用带java命令的可执行文件现了一些奇怪的问题
- 关于ftp客户端多线程上传文件问题,请高手指教
- 关于使用Java与sqlserver2000数据库连接的问题
- socket 通讯问题 请进
- 关于jBuilder9的问题
- java连接mysql数据库操作的问题
- Applet打开网页的问题?
- 使用JDBC桥连接MySQL数据库,把 ”JDBC驱动的类包解压到JAVA应用程序的运行目录“怎么理解这句话,”JAVA应用程序的运行目录“什么意思,具体问题请看:
- 123L表示long型,123.0F表示float型,那么我要表示short,有没有后缀表示法?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class MoveRect extends JFrame { public MoveRect() {
// Create a MovingMessagePanel for displaying a moving message
MovingRectPanel p = new MovingRectPanel("Move Rect");
getContentPane().add(p); // Create a timer for the listener p
Timer timer = new Timer(1000, p);
timer.start();
} /** Main method */
public static void main(String[] args) {
MoveRect frame = new MoveRect();
frame.setTitle("MoveRect");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 400);
frame.setVisible(true);
}
}// Displaying a moving message
class MovingRectPanel extends JPanel implements MouseListener, ActionListener {
private Point spoint = new Point(0, 0);//start point
private Point epoint = new Point(0, 0);//end piont
private Point rectpoint = new Point(0, 0); public MovingRectPanel(String message) {
addMouseListener(this);
} /** Handle ActionEvent */
public void actionPerformed(ActionEvent e) {
repaint();
} /** Paint message */
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println(((epoint.x - spoint.x) / 10) + " " + ((epoint.y - spoint.y) / 10));
System.out.println(spoint.x + " " + spoint.y);
System.out.println(epoint.x + " " + epoint.y);
if(rectpoint.x<epoint.x)
rectpoint.move(rectpoint.x + ((epoint.x - spoint.x) / 10), rectpoint.y + ((epoint.y - spoint.y) / 10));
g.drawLine(spoint.x, spoint.y, epoint.x, epoint.y);
g.drawRect(rectpoint.x, rectpoint.y, 20, 40);
} public void mouseClicked(MouseEvent e) {
} public void mousePressed(MouseEvent e) {
spoint.move(e.getX(), e.getY());
rectpoint.move(spoint.x, spoint.y);
} public void mouseReleased(MouseEvent e) {
epoint.move(e.getX(), e.getY());
} public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { }
}
// Create a timer for the listener p
Timer timer = new Timer(1000, p);
timer.start(); 计算点和画图:
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println(((epoint.x - spoint.x) / 10) + " " + ((epoint.y - spoint.y) / 10));
System.out.println(spoint.x + " " + spoint.y);
System.out.println(epoint.x + " " + epoint.y);
if(rectpoint.x <epoint.x)
rectpoint.move(rectpoint.x + ((epoint.x - spoint.x) / 10), rectpoint.y + ((epoint.y - spoint.y) / 10));
g.drawLine(spoint.x, spoint.y, epoint.x, epoint.y);
g.drawRect(rectpoint.x, rectpoint.y, 20, 40);
}