Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I've reduced the example to just the anti-aliasing, and I am unable to reproduce the problem. It doesn't appear to be platform dependent. I'm not sure why you are using <code>getClipBounds()</code>.</p> <p>Addendum:</p> <blockquote> <p>The <code>JPanel</code> background (a gradient) needs to shine through…</p> </blockquote> <p>I've update the example to use a gradient background behind a transparent button; I've put anti-aliased (left) and aliased (right) examples side-by-side. I see no unexpected behavior. </p> <p><img src="https://i.stack.imgur.com/QtvZd.png" alt="ButtonUITest.png"></p> <pre><code>import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.RenderingHints; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.plaf.basic.BasicButtonUI; /** @see http://stackoverflow.com/questions/5169647 */ public class ButtonUITest extends JPanel { public ButtonUITest() { this.setLayout(new GridLayout(1, 0)); this.setPreferredSize(new Dimension(640, 480)); this.add(new CustomButton(true)); this.add(new CustomButton(false)); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); int w = this.getWidth(); int h = this.getHeight(); Graphics2D g2d = (Graphics2D) g; g2d.setPaint(new GradientPaint(0, 0, Color.blue, w, h, Color.red)); g2d.fillRect(0, 0, w, h); } private void display() { JFrame f = new JFrame("ButtonUITest"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } private static class CustomButton extends JButton { public CustomButton(boolean antialiased) { this.setOpaque(false); this.setUI(new CustomButtonUI(antialiased)); } } private static class CustomButtonUI extends BasicButtonUI { private boolean antialiased; public CustomButtonUI(boolean antialiased) { this.antialiased = antialiased; } @Override public void paint(Graphics g, JComponent c) { int w = c.getWidth(); int h = c.getHeight(); Graphics2D g2d = (Graphics2D) g; if (antialiased) { g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); } g2d.setColor(Color.LIGHT_GRAY); g2d.fillOval(0, 0, w, 2 * h); } } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new ButtonUITest().display(); } }); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload