Java Shaped Window with Outline

I successfully create a polygon shaped window. However, I would like to describe it with a subtle punch.

Is it possible to outline a formatted window in Java?

Here is my working code, I use the componentResized method to set the form for the window. However, if there is any other way to get the scheme, both in order to minimize the Tab-Window and maximize the Tab-Window, please help.

//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) } } }); } } 
+4
source share
3 answers

I managed to figure out how to solve the problem with Java 6. It seems that just taking out the antialias line in my drawing method solves the problem with graphic rendering, where the path is not clean enough. The code here fully works ...

Relations Aubrey.

  //LongTab.java //Desktop Tab import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.geom.*; import com.sun.awt.AWTUtilities.*; public class LongTab extends JWindow implements MouseListener{ static LongTab t; Boolean isVisible = false; GeneralPath closed; final static BasicStroke stroke = new BasicStroke(2.0f); GeneralPath path; //Constructor 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); com.sun.awt.AWTUtilities.setWindowShape(t, path); }}); setSize(40, 1080); setLocation(1880, 0); }//end of constructor. 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 mouseExited (MouseEvent me) {} public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; //antialias commented out to fix outline glitch. //g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setStroke(stroke); g2.drawLine(40, 1080, 40, 700); g2.drawLine(40, 700, 20, 690); g2.drawLine(20, 690, 20, 400); g2.drawLine(20, 400, 40,390); g2.drawLine(40, 390, 40, 0); } public static void main (String[] args){ t = new LongTab(); t.setVisible(true); } } 
0
source

I modified your code to display the outlined outline of the window.

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

Notice that I also made the polygon a little smaller, because I don't have an HD screen to fit your original polygon.

Finally, I deleted the event handling code because I could not understand what you were trying to do with the clicks of the mouse. With this working starting point, you can add event handling code again.

+1
source

Ok, added import and took out a transparency check. When I run this Java6 code, the red outline is displayed for <1 sec, then the outline disappears! Do not know why?

 //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; import com.sun.awt.AWTUtilities.*; 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); com.sun.awt.AWTUtilities.setWindowShape(this, 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); //} } } 
+1
source

Source: https://habr.com/ru/post/1413425/


All Articles