请教各位高手,我想从两次鼠标点击获得一个长度,以这个长度在屏幕上画尽量多的八边形。
我分别写了获得鼠标距离和画八边形的程序,请问怎么把他们联系在一起呢……我有点晕菜 ~_~//获得两次点击的距离
public class h2q1 extends JFrame{ public static void main(String[] args) {
// TODO Auto-generated method stub
new h2q1();
}
int x = 0,y = 0,t1,t2;
float diameter; h2q1(){
super("DrawOctagon");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,600);
MouseComponent component = new MouseComponent();
add(component);
setVisible(true);
}
class MouseComponent extends JComponent {
public MouseComponent() { addMouseListener(new MouseHandler()); } private class MouseHandler extends MouseAdapter {
int count = 0;
Point p; public void mouseClicked(MouseEvent event) {
if (count == 0) {
p = event.getPoint();
count++;
} else if (count == 1) {
System.out.println("distance= "+Point.distance(p.x, p.y, event.getX(),
event.getY()));
count++;
}
}
}
}}
//画八边形
public class Octagon extends Canvas{
private int diameter = 80;
int maxX,maxY;
void init(){
Dimension d = getSize();
maxX = d.width - 1;
maxY = d.height - 1;
}
//round for short
int r(float x) {
return Math.round(x);
} public void paint(Graphics g){
init(); float side_length = (float) (diameter * Math.sin(Math.PI / 8f));
float height = (float) (diameter * Math.cos(Math.PI / 8f));
float offsetX = (maxX % height) / 2;
float offsetY = (maxY % height) / 2;
int row = (int)(maxX / height);
int column = (int)(maxY / height);
float temp = (height - side_length)/2;
//draw ------
for(int j = 0; j <= column; j++)
{
for(int i = 0; i < row; i++)
{
g.drawLine(r(offsetX + temp + i * height), r(offsetY + j * height),
r(offsetX + temp + i * height + side_length), r(offsetY+ j * height));
}
}
//draw ||||||
for(int j = 0; j < column; j++)
{
for(int i = 0; i <= row; i++)
{
g.drawLine(r(offsetX + i * height), r(offsetY + temp + j * height),
r(offsetX + i * height), r(offsetY + temp + j * height + side_length));
}
}
//draw ///////
for(int j = 0; j < column*2; j++)
{
for(int i = 0; i < row; i++)
{
if(j%2 == 0)
{
g.drawLine(r(offsetX + i * height), r(offsetY + temp + (float)(j/2) * height),
r(offsetX + temp + i * height), r(offsetY +(float)(j/2) * height));
}
else
{
g.drawLine(r(offsetX + temp + i * height + side_length), r(offsetY + height + (float)(j/2) * height),
r(offsetX + height + i * height), r(offsetY + temp + (float)(j/2) * height + side_length));
}
}
}
//draw \\\\\
for(int j = 0; j < column*2; j++)
{
for(int i = 0; i < row; i++)
{
if(j%2 == 0)
{
g.drawLine(r(offsetX + temp + i * height + side_length), r(offsetY+ (float)(j/2) * height),
r(offsetX + height + i * height), (r(offsetY + temp + (float)(j/2) * height)));
}
else
{
g.drawLine(r(offsetX + i * height), r(offsetY + temp + (float)(j/2) * height + side_length),
r(offsetX + temp + i * height), r(offsetY + height + (float)(j/2) * height));
}
}
}
}
}
分别都可以运行,求教怎么把他们联系起来?另外我的八边形画的也有点怪,请高手教我……
谢谢
我分别写了获得鼠标距离和画八边形的程序,请问怎么把他们联系在一起呢……我有点晕菜 ~_~//获得两次点击的距离
public class h2q1 extends JFrame{ public static void main(String[] args) {
// TODO Auto-generated method stub
new h2q1();
}
int x = 0,y = 0,t1,t2;
float diameter; h2q1(){
super("DrawOctagon");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,600);
MouseComponent component = new MouseComponent();
add(component);
setVisible(true);
}
class MouseComponent extends JComponent {
public MouseComponent() { addMouseListener(new MouseHandler()); } private class MouseHandler extends MouseAdapter {
int count = 0;
Point p; public void mouseClicked(MouseEvent event) {
if (count == 0) {
p = event.getPoint();
count++;
} else if (count == 1) {
System.out.println("distance= "+Point.distance(p.x, p.y, event.getX(),
event.getY()));
count++;
}
}
}
}}
//画八边形
public class Octagon extends Canvas{
private int diameter = 80;
int maxX,maxY;
void init(){
Dimension d = getSize();
maxX = d.width - 1;
maxY = d.height - 1;
}
//round for short
int r(float x) {
return Math.round(x);
} public void paint(Graphics g){
init(); float side_length = (float) (diameter * Math.sin(Math.PI / 8f));
float height = (float) (diameter * Math.cos(Math.PI / 8f));
float offsetX = (maxX % height) / 2;
float offsetY = (maxY % height) / 2;
int row = (int)(maxX / height);
int column = (int)(maxY / height);
float temp = (height - side_length)/2;
//draw ------
for(int j = 0; j <= column; j++)
{
for(int i = 0; i < row; i++)
{
g.drawLine(r(offsetX + temp + i * height), r(offsetY + j * height),
r(offsetX + temp + i * height + side_length), r(offsetY+ j * height));
}
}
//draw ||||||
for(int j = 0; j < column; j++)
{
for(int i = 0; i <= row; i++)
{
g.drawLine(r(offsetX + i * height), r(offsetY + temp + j * height),
r(offsetX + i * height), r(offsetY + temp + j * height + side_length));
}
}
//draw ///////
for(int j = 0; j < column*2; j++)
{
for(int i = 0; i < row; i++)
{
if(j%2 == 0)
{
g.drawLine(r(offsetX + i * height), r(offsetY + temp + (float)(j/2) * height),
r(offsetX + temp + i * height), r(offsetY +(float)(j/2) * height));
}
else
{
g.drawLine(r(offsetX + temp + i * height + side_length), r(offsetY + height + (float)(j/2) * height),
r(offsetX + height + i * height), r(offsetY + temp + (float)(j/2) * height + side_length));
}
}
}
//draw \\\\\
for(int j = 0; j < column*2; j++)
{
for(int i = 0; i < row; i++)
{
if(j%2 == 0)
{
g.drawLine(r(offsetX + temp + i * height + side_length), r(offsetY+ (float)(j/2) * height),
r(offsetX + height + i * height), (r(offsetY + temp + (float)(j/2) * height)));
}
else
{
g.drawLine(r(offsetX + i * height), r(offsetY + temp + (float)(j/2) * height + side_length),
r(offsetX + temp + i * height), r(offsetY + height + (float)(j/2) * height));
}
}
}
}
}
分别都可以运行,求教怎么把他们联系起来?另外我的八边形画的也有点怪,请高手教我……
谢谢
解决方案 »
- 如何禁用JScrollPane的键盘事件响应?
- Could not find the main class 问题
- 为什么在一个java源文件当中只能够有一个public类呢?
- 有哪位高手用Java开发过GIS方面的软件
- 关于Resource的获得问题(解决马上结贴)
- JFrame的Title
- java中的压缩类碰到中文文件就会失败,请问怎么解决啊??
- 大哥们这是我最后30分了,全给了!是关于JTree的一个很简单的问题
- 怎么用sendmail发送纯文本邮件,无论中英文都可显示,但如改用发送html格式的邮件,即message.setContent("Hello,this is content,后面
- JAVA和VC在编程上谁更胜一筹?
- 谁有twaver 3.5完整包给我一份
- Exception in thread "main" java.lang.NullPointerException
import java.awt.event.*;import javax.swing.*;public class EightCornerShape extends JFrame { public static void main(String[] args) {
// TODO Auto-generated method stub
new EightCornerShape();
} int x = 0, y = 0, t1, t2;
float diameter; EightCornerShape() {
super("DrawOctagon");
setSize(600, 600);
JPanel pane = (JPanel) this.getContentPane();
pane.setLayout(new BorderLayout());
Octagon octagon = new Octagon();
pane.add(octagon,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
setVisible(true);
} class Octagon extends JPanel {
private int diameter = 80;
int maxX, maxY;
int startX = -1, startY = -1;
public Octagon() {
addMouseListener(new MouseHandler());
} void init() {
Dimension d = getSize();
maxX = d.width - 1;
maxY = d.height - 1;
} // round for short
int r(float x) {
return Math.round(x);
} public void paintComponent(Graphics g) {
super.paintComponent(g);
if(startX < 0|| startY< 0 || maxX<=0 || maxY <= 0){
return;
}
g.translate(startX, startY); float side_length = (float) (diameter * Math.sin(Math.PI / 8f));
float height = (float) (diameter * Math.cos(Math.PI / 8f));
float offsetX = (maxX % height) / 2;
float offsetY = (maxY % height) / 2;
int row = (int) (maxX / height);
int column = (int) (maxY / height);
float temp = (height - side_length) / 2; // draw ------
for (int j = 0; j <= column; j++) {
for (int i = 0; i < row; i++) {
g.drawLine(r(offsetX + temp + i * height), r(offsetY + j
* height),
r(offsetX + temp + i * height + side_length), r(offsetY
+ j * height));
}
}
// draw ||||||
for (int j = 0; j < column; j++) {
for (int i = 0; i <= row; i++) {
g.drawLine(r(offsetX + i * height), r(offsetY + temp + j
* height), r(offsetX + i * height), r(offsetY + temp
+ j * height + side_length));
}
}
// draw ///////
for (int j = 0; j < column * 2; j++) {
for (int i = 0; i < row; i++) {
if (j % 2 == 0) {
g.drawLine(r(offsetX + i * height), r(offsetY + temp
+ (float) (j / 2) * height), r(offsetX + temp + i
* height), r(offsetY + (float) (j / 2) * height));
} else {
g.drawLine(r(offsetX + temp + i * height + side_length),
r(offsetY + height + (float) (j / 2) * height),
r(offsetX + height + i * height), r(offsetY + temp
+ (float) (j / 2) * height + side_length));
}
}
}
// draw \\\\\
for (int j = 0; j < column * 2; j++) {
for (int i = 0; i < row; i++) {
if (j % 2 == 0) {
g.drawLine(r(offsetX + temp + i * height + side_length),
r(offsetY + (float) (j / 2) * height), r(offsetX
+ height + i * height), (r(offsetY + temp
+ (float) (j / 2) * height)));
} else {
g.drawLine(r(offsetX + i * height), r(offsetY + temp
+ (float) (j / 2) * height + side_length),
r(offsetX + temp + i * height), r(offsetY + height
+ (float) (j / 2) * height));
}
}
}
} private class MouseHandler extends MouseAdapter {
int count = 0;
Point p; public void mousePressed(MouseEvent event) {
if (count == 0) {
p = event.getPoint();
count++;
} else if (count == 1) {
startX = p.x;
startY = p.y;
maxX = event.getX() - startX;
maxY = event.getY() - startY;
System.out.println("distance= "
+ Point.distance(p.x, p.y, event.getX(), event
.getY()));
count=0;
repaint();
}
}
}
}}
// TODO Auto-generated method stub
new h2q1();
} h2q1(){
super("DrawOctagon");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,600);
add(new Octagon());
setVisible(true);
}
}
public class Octagon extends JPanel{
private int diameter = -1; // no diameter input
int maxX,maxY;
void init(){
Dimension d = getSize();
maxX = d.width - 1;
maxY = d.height - 1;
addMouseListener(new MouseHandler());
}
//round for short
int r(float x) {
return Math.round(x);
} public void paint(Graphics g){
init();
if(diameter == -1)
return; float side_length = (float) (diameter * Math.sin(Math.PI / 8f));
float height = (float) (diameter * Math.cos(Math.PI / 8f));
float offsetX = (maxX % height) / 2;
float offsetY = (maxY % height) / 2;
int row = (int)(maxX / height);
int column = (int)(maxY / height);
float temp = (height - side_length)/2;
//draw ------
for(int j = 0; j <= column; j++)
{
for(int i = 0; i < row; i++)
{
g.drawLine(r(offsetX + temp + i * height), r(offsetY + j * height),
r(offsetX + temp + i * height + side_length), r(offsetY+ j * height));
}
}
//draw ||||||
for(int j = 0; j < column; j++)
{
for(int i = 0; i <= row; i++)
{
g.drawLine(r(offsetX + i * height), r(offsetY + temp + j * height),
r(offsetX + i * height), r(offsetY + temp + j * height + side_length));
}
}
//draw ///////
for(int j = 0; j < column*2; j++)
{
for(int i = 0; i < row; i++)
{
if(j%2 == 0)
{
g.drawLine(r(offsetX + i * height), r(offsetY + temp + (float)(j/2) * height),
r(offsetX + temp + i * height), r(offsetY +(float)(j/2) * height));
}
else
{
g.drawLine(r(offsetX + temp + i * height + side_length), r(offsetY + height + (float)(j/2) * height),
r(offsetX + height + i * height), r(offsetY + temp + (float)(j/2) * height + side_length));
}
}
}
//draw \\\\\
for(int j = 0; j < column*2; j++)
{
for(int i = 0; i < row; i++)
{
if(j%2 == 0)
{
g.drawLine(r(offsetX + temp + i * height + side_length), r(offsetY+ (float)(j/2) * height),
r(offsetX + height + i * height), (r(offsetY + temp + (float)(j/2) * height)));
}
else
{
g.drawLine(r(offsetX + i * height), r(offsetY + temp + (float)(j/2) * height + side_length),
r(offsetX + temp + i * height), r(offsetY + height + (float)(j/2) * height));
}
}
}
}
private class MouseHandler extends MouseAdapter {
int count = 0;
Point p; public void mouseClicked(MouseEvent event) {
if (count == 0) {
p = event.getPoint();
//System.out.println(p);
count++;
} else if (count == 1) {
diameter = (int) Point.distance(p.x, p.y, event.getX(),event.getY());
//System.out.println(event.getPoint());
System.out.println("distance= "+Point.distance(p.x, p.y, event.getX(),
event.getY()));
count++;
repaint();
}
}
}}