多角形のウィンドウを正常にレンダリングしています。ただし、細いストロークで輪郭を描きたいと思います。
Javaで成形ウィンドウの輪郭を描くことは可能ですか?
これが私の作業コードです。 componentResized メソッドを使用してウィンドウの形状を設定しています。ただし、タブ ウィンドウが最小化されている場合とタブ ウィンドウが最大化されている場合の両方で、アウトラインを取得するために他の方法がある場合は、助けてください。
//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)
}
}
});
}
}