Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.gui > #4471

Re: ctor: this.setLayout(

From "John B. Matthews" <john.b..matthews@THRWHITE.remove-dii-this>
Subject Re: ctor: this.setLayout(
Message-ID <nospam-376A9C.04130515112008@feeder.motzarella.org> (permalink)
Newsgroups comp.lang.java.gui
References <nospam-06C9C0.073807141
Date 2011-04-27 15:50 +0000
Organization TDS.net

Show all headers | View raw


  To: comp.lang.java.gui
In article <nospam-06C9C0.07380714112008@feeder.motzarella.org>,
 "John B. Matthews" <nospam@nospam.invalid> wrote:

> In article 
> <a037f2e0-dc88-4004-8204-11818ad7d8d7@r36g2000prf.googlegroups.com>,
>  lbrtchx@gmail.com wrote:
> 
> [...]
> >  I think I still have a chicken-or-egg first kind of problem with my
> > code and I see as one of the differences between your example and my 
> > toy code, that you are employing an actual JLabel as canvas. Is there 
> > anything more graphically convenient that could be used as canvas?
> 
> JLabel? We don't need no stinking JLabel! :-)

Sadly, I have stumbled into hubris. Again. One disadvantage of raw 
drawing is how easy it is to get the geometry wrong. I made another try 
below.

A more flexible approach is to implement the Icon interface in a 
JComponent, e.g. JPanel or JLabel. This makes it somewhat easier to mix 
components in a layout, as the x and y offsets are parameters to the 
paintIcon() method. Here is an example:

<http://sites.google.com/site/drjohnbmatthews/composite>

I see at least one rendering implementation extends JPanel.

<http://www.exmpl.de/projects/mathml/math.html>

[Some knowledge of German required.]

<code>
class UrlPane extends JPanel {
    private final Font font = new Font("Serif", Font.BOLD, 24);
    private final String label = "\u2615 " + name;

    public UrlPane() {
        this.setBackground(Color.lightGray);
        this.setPreferredSize(new Dimension(0, 250));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2D = (Graphics2D) g;

        int inset = 30;
        int h = this.getHeight() - inset;
        int w = h * 1618 / 1000;
        int x = (this.getWidth() - w) / 2;
        int y = inset / 2;

        // __ circle
        Ellipse2D ellipse = new Ellipse2D.Double(x, y, w, h);
        g2D.draw(ellipse);

        // __ square
        g2D.drawRect(x, y, w, h);

        // __ title
        g.setFont(font);
        int x2 = this.getWidth() / 2; 
        int y2 = this.getHeight() / 2;
        int w2 = g.getFontMetrics().stringWidth(label) / 2;
        int h2 = g.getFontMetrics().getDescent();
        g.drawString(label, x2 - w2, y2 + h2);
    }
 }
</code>

-- 
John B. Matthews
trashgod at gmail dot com
http://home.roadrunner.com/~jbmatthews/

---
 * Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24

Back to comp.lang.java.gui | Previous | Next | Find similar


Thread

Re: ctor: this.setLayout( "John B. Matthews" <john.b..matthews@THRWHITE.remove-dii-this> - 2011-04-27 15:50 +0000

csiph-web