gpt4 book ai didi

带轮廓的 Java 异形窗口

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:11 25 4
gpt4 key购买 nike

我成功渲染了一个多边形窗口。但是,我想用细笔勾勒出它的轮廓。

是否可以在 Java 中勾勒出异形窗口?

这是我的工作代码,我使用 componentResized 方法来设置窗口的形状。但是,如果有任何其他方法可以获取轮廓,无论是在 Tab-Window 最小化时还是在 Tab-Window 最大化时,请提供帮助。

//LongTab.java
//Desktop Tab

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
import static java.awt.GraphicsDevice.WindowTranslucency.*;

public class LongTab extends JWindow implements MouseListener{

static LongTab t;
Boolean isVisible = false;
final static BasicStroke stroke = new BasicStroke(2.0f);
GeneralPath path;

public LongTab(){
addMouseListener(this);
setSize(500, 1080);

addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e){
Polygon polygon = new Polygon();
polygon = new Polygon();
polygon.addPoint(40, 1080);
polygon.addPoint(40, 700);
polygon.addPoint(20, 690);
polygon.addPoint(20, 400);
polygon.addPoint(40, 390);
polygon.addPoint(40, 0);
polygon.addPoint(500, 0);
polygon.addPoint(500, 1080);

path = new GeneralPath();
path.append(polygon, true);
setShape(path);
}
});

setSize(40, 1080);
setLocation(1880, 0);
}

public void mouseClicked (MouseEvent me) {
if(!isVisible) {
isVisible=true;
t.setSize(400, 1080);
t.setLocation(1520, 0);
return;
}
if(isVisible) {
isVisible=false;
t.setSize(40, 1080);
t.setLocation(1880, 0);
}
return;
}

public void mouseEntered (MouseEvent me) {
}

public void mousePressed (MouseEvent me) {
}

public void mouseReleased (MouseEvent me) {
}

public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setStroke(stroke);
//if(!isVisible)
//g2.draw(path);
//repaint();
}

public void mouseExited (MouseEvent me) {
}

public static void main (String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();

//If shaped windows aren't supported, exit.
if (!gd.isWindowTranslucencySupported(PERPIXEL_TRANSPARENT)) {
System.err.println("Shaped windows are not supported");
System.exit(0);
} else {
t = new LongTab();
t.setVisible(true)
}
}
});
}
}

最佳答案

我修改了您的代码以显示异形窗口轮廓。

    //LongTab.java
//Desktop Tab

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsDevice.WindowTranslucency;
import java.awt.GraphicsEnvironment;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.geom.GeneralPath;

import javax.swing.JFrame;

public class LongTab extends JFrame{

private Polygon polygon;

public LongTab() {
setSize(500, 720);
setLocation(10, 10);

setUndecorated(true);


polygon = new Polygon();
polygon = new Polygon();
polygon.addPoint(40, 720);
polygon.addPoint(40, 700);
polygon.addPoint(20, 690);
polygon.addPoint(20, 400);
polygon.addPoint(40, 390);
polygon.addPoint(40, 20);
polygon.addPoint(500, 20);
polygon.addPoint(500, 720);

GeneralPath path = new GeneralPath();
path.append(polygon, true);
setShape(path);
}

public void paint(Graphics g) {
super.paint(g);

Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setStroke(new BasicStroke(2.0f));
g2.setColor(Color.RED);
g2.draw(polygon);
}

public static void main(String[] args) {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();

// If shaped windows aren't supported, exit.
if (!gd.isWindowTranslucencySupported(WindowTranslucency.PERPIXEL_TRANSLUCENT)) {
System.err.println("Shaped windows are not supported");
System.exit(0);
} else {
new LongTab().setVisible(true);
}
}
}

请注意,我还使多边形变小了一些,因为我没有适合您原始多边形的高清屏幕。

最后我删除了事件处理代码,因为我无法理解您尝试用鼠标点击做什么。有了这个工作起点,您可以再次添加事件处理代码。

关于带轮廓的 Java 异形窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10676564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com