Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在&;重新定义窗口_Java_Swing - Fatal编程技术网

Java 在&;重新定义窗口

Java 在&;重新定义窗口,java,swing,Java,Swing,两个星期以来,我一直绞尽脑汁想弄明白这一点,现在我有点不知所措了 本应为使用两个窗口的Java类编写程序: 第一个窗口显示面图像(使用图形基本体生成) 第二个窗口显示用于修改面部不同组件(眼睛等)的控件 画面,检查。 拾取面的组件,检查。 要获取控件以修改组件,请选中 我遇到的问题是让第二个窗口根据拾取的组件更改控件(通过在图像上单击鼠标) 我是否需要在每次选择不同的组件时完全重新定义第二个窗口,或者是否有一种方法可以简单地更改按钮和滑块,而无需每次重复第二个窗口 DrawPanel.jav

两个星期以来,我一直绞尽脑汁想弄明白这一点,现在我有点不知所措了

本应为使用两个窗口的Java类编写程序:

  • 第一个窗口显示面图像(使用图形基本体生成)

  • 第二个窗口显示用于修改面部不同组件(眼睛等)的控件

画面,检查。 拾取面的组件,检查。 要获取控件以修改组件,请选中

我遇到的问题是让第二个窗口根据拾取的组件更改控件(通过在图像上单击鼠标)

我是否需要在每次选择不同的组件时完全重新定义第二个窗口,或者是否有一种方法可以简单地更改按钮和滑块,而无需每次重复第二个窗口

DrawPanel.java

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();
}