Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 如何为GUI实现放大功能?_Java_User Interface_Graphics_Zooming - Fatal编程技术网

Java 如何为GUI实现放大功能?

Java 如何为GUI实现放大功能?,java,user-interface,graphics,zooming,Java,User Interface,Graphics,Zooming,我有一个简单的图形用户界面,显示4个形状,当你点击形状内部时,它会改变颜色。我现在需要实现一个放大功能,当用户点击拖动鼠标时,它将放大新窗口中拖动的区域(它将是一个矩形)。这是我的GUI类: import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.MouseInfo; import java.awt.Point;

我有一个简单的图形用户界面,显示4个形状,当你点击形状内部时,它会改变颜色。我现在需要实现一个放大功能,当用户点击拖动鼠标时,它将放大新窗口中拖动的区域(它将是一个矩形)。这是我的GUI类:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;

import javax.swing.*;

@SuppressWarnings("serial")
public class taskTwo2 extends JPanel {
    private static final int PREF_W = 200;
    private static final int PREF_H = PREF_W;
    private Color circleColor = Color.RED;   //starting colour
    private Color circleColor2 = Color.BLUE;
    private Color squareColor = Color.GREEN;
    private Color squareColor2 = Color.YELLOW;
    private int circX  = 10;
    private int circY = circX;
    private int circW = PREF_W - 2 * circX;
    private int circH = PREF_H - 2 * circY;

    public taskTwo2() {
        addMouseListener(new MyMouse()); //mouse click listener
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        // to smooth out graphics
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //smoothes out edges

        g2.setColor(circleColor);
        g2.fillOval(circX, circY, circW, circH);
        g2.setColor(Color.BLACK);
        g2.drawOval(circX, circY, circW, circH);


        g2.setColor(circleColor2);
        g2.fillOval(25*(circX), 25*(circY), circW, circH);
        g2.setColor(Color.BLACK);
        g2.drawOval(25*(circX), 25*(circY), circW, circH);


        g2.setColor(squareColor);
        g2.fillRect(circX, 25*(circY), circW, circH);
        g2.setColor(Color.BLACK);
        g2.drawRect(circX, 25*(circY), circW, circH);


        g2.setColor(squareColor2);
        g2.fillRect(25*(circX), circY, circW, circH);
        g2.setColor(Color.BLACK);
        g2.drawRect(25*(circX), circY, circW, circH);
    }

    public Dimension getPreferredSize() {
        if (isPreferredSizeSet()) {
            return super.getPreferredSize();
        }
        return new Dimension(PREF_W, PREF_H);
    }

    public static boolean isInCircle(Point mouseLocation, double cX, double cY, double cR){
        final double dX = mouseLocation.getX()-cX;
        final double dY = mouseLocation.getY()-cY;
        return Math.sqrt(dX*dX+dY*dY)<=cR;     //Euclidean distance
    }

    private class MyMouse extends MouseAdapter {
        Random rand = new Random();

        @Override
        public void mousePressed(MouseEvent e) {

            Point mouseLocation = e.getPoint(); //return mouse click position

            if(isInCircle(mouseLocation,circX+circW/2,circY+circH/2,circW/2)){
                float red = rand.nextFloat();       //generates a random value for the red tint value
                float green = rand.nextFloat();
                float blue = rand.nextFloat();
                circleColor = new Color(red, green, blue); //new colour for first circle
            }

            if(isInCircle(mouseLocation,25*(circX)+circW/2,25*(circY)+circH/2,circW/2)){
                float red = rand.nextFloat();       
                float green = rand.nextFloat();
                float blue = rand.nextFloat();
                circleColor2 = new Color(red, green, blue);
            }

            if(isInCircle(mouseLocation,circX+circW/2,25*(circY)+circH/2,circW/2)){
                float red = rand.nextFloat();       
                float green = rand.nextFloat();
                float blue = rand.nextFloat();
                squareColor = new Color(red, green, blue);
            }

            if(isInCircle(mouseLocation,25*(circX)+circW/2,circY+circH/2,circW/2)){
                float red = rand.nextFloat();       
                float green = rand.nextFloat();
                float blue = rand.nextFloat();
                squareColor2 = new Color(red, green, blue);
            }

            repaint();   //repaint components
        }
    }

    private static void createAndShowGui() { //code for GUI visuals
        JFrame frame = new JFrame("MyTaskToo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new taskTwo2());
        frame.setSize(500, 500);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }
}
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.MouseInfo;
导入java.awt.Point;
导入java.awt.RenderingHints;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.util.Random;
导入javax.swing.*;
@抑制警告(“串行”)
公共类taskTwo2扩展了JPanel{
专用静态最终整型预调W=200;
私有静态final int PREF_H=PREF_W;
专用颜色circleColor=Color.RED;//起始颜色
专用颜色circleColor2=Color.BLUE;
私有颜色squareColor=Color.GREEN;
专用颜色squareColor2=Color.YELLOW;
私有int circX=10;
private int circY=circX;
private int circW=PREF_W-2*circX;
private int circH=PREF_H-2*circY;
公共任务2(){
addMouseListener(新建MyMouse());//鼠标单击侦听器
}
受保护组件(图形g){
超级组件(g);
//使图形平滑
图形2d g2=(图形2d)g;
g2.setRenderingHint(RenderingHits.KEY_ANTIALIASING,RenderingHits.VALUE_ANTIALIAS_ON);//平滑边缘
g2.setColor(圆环色);
g2.圆形(圆形,圆形,圆形,圆形);
g2.设置颜色(颜色为黑色);
g2.画椭圆(圆形,圆形,圆形,圆形);
g2.setColor(圆环色2);
g2.圆形(25*(圆形),25*(圆形),圆形,圆形);
g2.设置颜色(颜色为黑色);
g2.图椭圆形(25*(圆形),25*(圆形),圆形,圆形);
g2.setColor(squareColor);
g2.fillRect(约x,25*(约y),约w,约h);
g2.设置颜色(颜色为黑色);
g2.drawRect(约x,25*(约y),约w,约h);
g2.setColor(squareColor2);
g2.fillRect(25*(circX),circY,circW,circH);
g2.设置颜色(颜色为黑色);
g2.drawRect(25*(circX),circY,circW,circH);
}
公共维度getPreferredSize(){
如果(isPreferredSizeSet()){
返回super.getPreferredSize();
}
返回新维度(PREF_W,PREF_H);
}
公共静态布尔isInCircle(点鼠标定位、双cX、双cY、双cR){
final double dX=mouseLocation.getX()-cX;
final double dY=mouseLocation.getY()-cY;

返回Math.sqrt(dX*dX+dY*dY)根据您想要实现的功能,您可以使用多种方法来实现这一点。您可以简单地相应地缩放
图形
上下文,您可以对所有坐标应用比例因子,或者您可以使用
J/JXLayer
来实现这一点,您可以使用多种方法,具体取决于功能您想要实现。您可以简单地相应地缩放
图形
上下文,您可以对所有坐标应用缩放因子,或者您可以使用
J/JXLayer
来,