Java 在&;重新定义窗口
两个星期以来,我一直绞尽脑汁想弄明白这一点,现在我有点不知所措了 本应为使用两个窗口的Java类编写程序:Java 在&;重新定义窗口,java,swing,Java,Swing,两个星期以来,我一直绞尽脑汁想弄明白这一点,现在我有点不知所措了 本应为使用两个窗口的Java类编写程序: 第一个窗口显示面图像(使用图形基本体生成) 第二个窗口显示用于修改面部不同组件(眼睛等)的控件 画面,检查。 拾取面的组件,检查。 要获取控件以修改组件,请选中 我遇到的问题是让第二个窗口根据拾取的组件更改控件(通过在图像上单击鼠标) 我是否需要在每次选择不同的组件时完全重新定义第二个窗口,或者是否有一种方法可以简单地更改按钮和滑块,而无需每次重复第二个窗口 DrawPanel.jav
- 第一个窗口显示面图像(使用图形基本体生成)
- 第二个窗口显示用于修改面部不同组件(眼睛等)的控件
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class DrawPanel extends JPanel
{
public Color[] faceColors = { Color.GREEN, Color.YELLOW, Color.MAGENTA };
public int target = 0;
public String targetName = "";
private int xPos = 350, yPos = 350;
private int xDim = 500, yDim = 500;
private Color faceColor = Color.GREEN;
int eW, eH, eY, eX1, eX2;
private int eyeX = 100, eyeY = 150;
private int eyeSize = 100;
private Color eyeColor = Color.BLUE;
private int nose = 1, noseW = 100, noseH = 150, noseY = 75;
private int mouth = 1, mouthW = 150, mouthH = 30, mouthY = 100;
private MyShape[] shapes; // array containing all the shapes
private JLabel statusLabel; // label displaying mouse coordinates
private ControlFrame inspect;
// constructor
public DrawPanel( JLabel status )
{
shapes = new MyShape[ 50 ]; // create the array
setBackground( Color.WHITE ); // set a white background
// add the mouse listeners
MouseHandler mouseHandler = new MouseHandler();
addMouseListener( mouseHandler );
addMouseMotionListener( mouseHandler );
// set the status label for displaying mouse coordinates
statusLabel = status;
// Load the default image
initDrawing();
inspect = new ControlFrame();
inspect.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
inspect.setLocation( 764, 32 );
inspect.setSize( 200, 700 );
inspect.setResizable( false );
inspect.setVisible( true );
} // end DrawPanel constructor
public void paintComponent( Graphics g )
{
super.paintComponent( g );
for ( int i = 0; i < 50; i++ )
{
if ( shapes[i] != null )
{
shapes[ i ].draw( g );
}
}
} // end method paintComponent
public void initDrawing()
{
defineFace( faceColor );
defineEyes( eyeColor );
defineMouth( mouth, mouthW, faceColor );
defineNose( nose, noseY );
}
public void defineFace ( Color faceCol )
{ // Create the face & ears
eW = (int)Math.round( xDim / 4 );
eH = (int)Math.round( yDim / 4 );
eY = (int)Math.round( yPos - ( yDim / 2 ) );
eX1 = (int)Math.round( xPos - ( xDim / 2 ) );
eX2 = (int)Math.round( xPos - eW + ( xDim / 2 ) );
shapes[0] = new MyOval( eX1, eY, eX1+eW, eY+eH, faceCol, true );
shapes[1] = new MyOval( eX1, eY, eX1+eW, eY+eH, Color.BLACK, false );
shapes[2] = new MyOval( eX2, eY, eX2+eW, eY+eH, faceCol, true );
shapes[3] = new MyOval( eX2, eY, eX2+eW, eY+eH, Color.BLACK, false );
shapes[4] = new MyOval( eX1, eY, eX1+xDim, eY+yDim, faceCol, true );
shapes[5] = new MyOval( eX1, eY, eX1+xDim, eY+yDim, Color.BLACK, false );
for ( int i = 6; i < 10; i++ )
shapes[i] = null;
}
public void defineEyes ( Color eyeCol )
{ // Create the eyes
eW = (int)Math.round( eyeSize * 1.2 );
eH = (int)Math.round( eyeSize * 0.8 );
eY = (int)Math.round( yPos - eyeY );
eX1 = (int)Math.round( xPos - eyeX - ( eW / 2 ) );
eX2 = (int)Math.round( xPos + eyeX - ( eW / 2 ) );
// Whites of Eyes
shapes[10] = new MyOval( eX1, eY, eX1+eW, eY+eH, Color.WHITE, true );
shapes[11] = new MyOval( eX1, eY, eX1+eW, eY+eH, Color.BLACK, false );
shapes[12] = new MyOval( eX2, eY, eX2+eW, eY+eH, Color.WHITE, true );
shapes[13] = new MyOval( eX2, eY, eX2+eW, eY+eH, Color.BLACK, false );
// Irises of eyes
eW = (int)Math.round( eyeSize * 0.8 );
eX1 = (int)Math.round( xPos - eyeX - ( eW / 2 ) );
eX2 = (int)Math.round( xPos + eyeX - ( eW / 2 ) );
shapes[14] = new MyOval( eX1, eY, eX1+eW, eY+eH, eyeCol, true );
shapes[15] = new MyOval( eX1, eY, eX1+eW, eY+eH, Color.BLACK, false );
shapes[16] = new MyOval( eX2, eY, eX2+eW, eY+eH, eyeCol, true );
shapes[17] = new MyOval( eX2, eY, eX2+eW, eY+eH, Color.BLACK, false );
eH = (int)Math.round( eyeSize * 0.6 );
shapes[18] = new MyOval( eX1+eW/4, eY+eW/4, eX1+eH, eY+eH, Color.BLACK, true );
shapes[19] = new MyOval( eX2+eW/4, eY+eW/4, eX2+eH, eY+eH, Color.BLACK, true );
for ( int i = 20; i < 30; i++ )
shapes[i] = null;
}
public void defineMouth ( int style, int width, Color faceCol )
{ // Create the mouth
switch ( style )
{ // Construct default mouth
case 1: shapes[30] = new MyOval( xPos-width, yPos+mouthY-mouthH, xPos+width, yPos+mouthY+mouthH, Color.PINK, true );
for ( int i = 31; i < 39; i++ )
shapes[i] = null;
shapes[39] = new MyOval( xPos-width, yPos+mouthY-mouthH*2, xPos+width, yPos+mouthY, faceCol, true );
break;
// More definitions to come
}
}
public void defineNose ( int style, int height )
{ // Create the nose
switch ( style )
{ // Construct default nose
case 1: shapes[40] = new MyOval( xPos-noseW/2, yPos-height, xPos+noseW/2, yPos-height+noseH, Color.BLACK, true );
for ( int i = 41; i < 50; i++ )
shapes[i] = null;
break;
// More definitions to come
}
}
// handles mouse events for this JPanel
private class MouseHandler extends MouseAdapter
implements MouseMotionListener
{
// creates and sets the initial position for the new shape
public void mousePressed( MouseEvent e )
{
if ( target > 0 && target < 10 || target == 39 )
{
inspect.select( 1 );
targetName = "face";
}
else if ( target > 9 && target < 30 )
{
inspect.select( 2 );
targetName = "eyes";
}
else if ( target > 29 && target < 39 )
{
inspect.select( 3 );
targetName = "mouth";
}
else if ( target > 39 && target < 48 )
{
inspect.select( 4 );
targetName = "nose";
}
else
{
inspect.select( 0 );
targetName = "none";
}
} // end method mousePressed
// updates the status bar to show the current mouse coordinates
public void mouseMoved( MouseEvent e )
{
int x = e.getX();
int y = e.getY();
target = 0;
for ( int i = 49; i >= 0; i--)
{
if ( shapes[i] != null )
{
if ( x > shapes[i].getX1() && x < shapes[i].getX2() )
{
if ( y > shapes[i].getY1() && y < shapes[i].getY2() )
{
target = i;
break;
}
}
}
}
statusLabel.setText(String.format( "(%d,%d) ", e.getX(), e.getY() ) + inspect.picked() );
} // end method mouseMoved
} // end class MouseHandler
} // end class DrawPanel
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseMotionListener;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
公共类DrawPanel扩展了JPanel
{
公共颜色[]脸颜色={Color.GREEN,Color.YELLOW,Color.MAGENTA};
公共int目标=0;
公共字符串targetName=“”;
私有int xPos=350,yPos=350;
私有整数xDim=500,yDim=500;
专用颜色faceColor=Color.GREEN;
int-eW,呃,eY,eX1,eX2;
私有整数eyeX=100,eyeY=150;
私有int-eyeSize=100;
专用颜色eyeColor=Color.BLUE;
私家车整流罩=1,整流罩=100,整流罩=150,整流罩=75;
私人int-mouth=1,moutw=150,mouth=30,mouty=100;
私有MyShape[]形状;//包含所有形状的数组
私有JLabel statusLabel;//显示鼠标坐标的标签
私人控制框架检查;
//建造师
公共绘图面板(JLabel状态)
{
shapes=newmyshape[50];//创建数组
setBackground(Color.WHITE);//设置白色背景
//添加鼠标侦听器
MouseHandler MouseHandler=新的MouseHandler();
addMouseListener(mouseHandler);
addMouseMotionListener(mouseHandler);
//设置用于显示鼠标坐标的状态标签
statusLabel=状态;
//加载默认图像
初始化绘图();
检查=新的控制框架();
检查.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
检查设置位置(764,32);
检查。设置尺寸(200700);
检查。可设置大小(假);
检查。设置为可见(真);
}//结束DrawPanel构造函数
公共组件(图形g)
{
超级组件(g);
对于(int i=0;i<50;i++)
{
如果(形状[i]!=null)
{
形状[i].绘制(g);
}
}
}//结束方法paintComponent
公共图纸()
{
定义(面部颜色);
确定是(眼睛颜色);
defineMouth(嘴、嘴、脸颜色);
定义(鼻子,多管闲事);
}
公共无效定义(彩色面颜色)
{//创建面部和耳朵
eW=(int)数学四舍五入(xDim/4);
eH=(int)数学四舍五入(yDim/4);
eY=(int)数学圆(yPos-(yDim/2));
eX1=(int)Math.round(xPos-(xDim/2));
eX2=(int)Math.round(xPos-eW+(xDim/2));
形状[0]=新的MyOval(eX1,eY,eX1+eW,eY+eH,faceCol,true);
形状[1]=新的MyOval(eX1,eY,eX1+eW,eY+eH,Color.BLACK,false);
形状[2]=新的MyOval(eX2,eY,eX2+eW,eY+eH,faceCol,true);
形状[3]=新的MyOval(eX2,eY,eX2+eW,eY+eH,Color.BLACK,false);
形状[4]=新的MyOval(eX1,eY,eX1+xDim,eY+yDim,faceCol,true);
形状[5]=新的MyOval(eX1,eY,eX1+xDim,eY+yDim,Color.BLACK,false);
对于(int i=6;i<10;i++)
形状[i]=null;
}
公共无效定义是(颜色为eyeCol)
{//创造眼睛
eW=(int)数学圆(eyeSize*1.2);
eH=(int)数学圆(眼睛大小*0.8);
eY=(int)Math.round(yPos-eyeY);
eX1=(int)Math.round(xPos-eyeX-(eW/2));
eX2=(int)数学圆(xPos+eyeX-(eW/2));
//眼白
形状[10]=新的MyOval(eX1,eY,eX1+eW,eY+eH,Color.WHITE,true);
形状[11]=新的MyOval(eX1,eY,eX1+eW,eY+eH,Color.BLACK,false);
形状[12]=新的MyOval(eX2,eY,eX2+eW,eY+eH,Color.WHITE,true);
形状[13]=新的MyOval(eX2,eY,eX2+eW,eY+eH,Color.BLACK,false);
//虹膜
eW=(int)数学圆(眼睛大小*0.8);
eX1=(int)Math.round(xPos-eyeX-(eW/2));
eX2=(int)数学圆(xPos+eyeX-(eW/2));
形状[14]=新的MyOval(eX1,eY,eX1+eW,eY+eH,eyeCol,true);
形状[15]=新的MyOval(eX1,eY,eX1+eW,eY+eH,Color.BLACK,false);
形状[16]=新的MyOval(eX2,eY,eX2+eW,eY+eH,eyeCol,true);
形状[17]=新的MyOval(eX2,eY,eX2+eW,eY+eH,Color.BLACK,false);
eH=(int)数学圆(eyeSize*0.6);
形状[18]=新的MyOval(eX1+eW/4,eY+eW/4,eX1+eH,eY+eH,Color.BLACK,true);
形状[19]=新的MyOval(eX2+eW/4,eY+eW/4,eX2+eH,eY+eH,Color.BLACK,true);
对于(int i=20;i<30;i++)
形状[i]=null;
}
public void defineMouth(整数样式、整数宽度、彩色面颜色)
{//创建嘴巴
开关(样式)
{//构造默认嘴
案例1:shapes[30]=新的MyOval(xPos-width,yPos+mouty-mouth,xPos+width,yPos+mouty+mouth,Color.PINK,true);
对于(int i=31;i<39;i++)
形状[i]=null;
形状[39]=新的MyOval(xPos宽度,yPos+mout
void inspect(int thing) {
removeAll();
if (thing == 0) { // nothing
add(new JLabel("Nothing selected"));
} else if (thing == 1) { // face
JComboBox faceColors = new JComboBox(
new String[] { "Green", "Yellow", "Magenta" });
faceColors.addItemListener(...);
add(faceColors);
} else {
// etc
}
pack();
}