Buttons and Event Handlers

Discussion in 'Java' started by Nessuno, Feb 21, 2010.

  1. Nessuno

    Nessuno Guest

    Hi,

    I am a newbie in Java. While learning from the Horstmann I have
    modified a little example from the book. The problem is that the
    buttons it creates are never shown.

    Please, would someone explain what I am missing? The code follows.
    Thanks in advance to everyone who will reply.

    fabio

    ButtonTest.java

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    public class ButtonTest
    {
    public static void main( String[] args )
    {
    EventQueue.invokeLater(new Runnable()
    {
    public void run()
    {
    ButtonFrame frame = new ButtonFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    }
    });
    }
    }

    @SuppressWarnings("serial")
    class ButtonFrame extends JFrame
    {
    public ButtonFrame()
    {
    setTitle("ButtonTest");
    setSize(300, 200);
    buttonPanel = new JPanel();
    makeButton("Red", Color.RED);
    makeButton("Green", Color.GREEN);
    makeButton("Blue", Color.BLUE);
    }

    private void makeButton(String name, final Color backgroundColor)
    {
    JButton button = new JButton(name);
    buttonPanel.add(button);
    button.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    buttonPanel.setBackground(backgroundColor);
    }

    });

    }

    private JPanel buttonPanel;
    }
    Nessuno, Feb 21, 2010
    #1
    1. Advertising

  2. On 02/21/2010 06:26 PM, Nessuno wrote:
    > Please, would someone explain what I am missing? The code follows.
    > Thanks in advance to everyone who will reply.
    >
    > buttonPanel = new JPanel();
    > makeButton("Red", Color.RED);
    > makeButton("Green", Color.GREEN);
    > makeButton("Blue", Color.BLUE);


    You make a buttonPanel and then... never add it to anything? So all of
    your buttons are now on some panel which is never attached to anything else.

    --
    Beware of bugs in the above code; I have only proved it correct, not
    tried it. -- Donald E. Knuth
    Joshua Cranmer, Feb 21, 2010
    #2
    1. Advertising

  3. On 2/21/2010 3:26 PM, Nessuno wrote:
    > Hi,
    >
    > I am a newbie in Java. While learning from the Horstmann I have
    > modified a little example from the book. The problem is that the
    > buttons it creates are never shown.
    >
    > Please, would someone explain what I am missing? The code follows.
    > Thanks in advance to everyone who will reply.
    >
    > fabio
    >
    > ButtonTest.java
    >
    > import javax.swing.*;
    > import java.awt.*;
    > import java.awt.event.ActionEvent;
    > import java.awt.event.ActionListener;
    >
    > public class ButtonTest
    > {
    > public static void main( String[] args )
    > {
    > EventQueue.invokeLater(new Runnable()
    > {
    > public void run()
    > {
    > ButtonFrame frame = new ButtonFrame();
    > frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    > frame.setVisible(true);
    > }
    > });
    > }
    > }
    >
    > @SuppressWarnings("serial")
    > class ButtonFrame extends JFrame
    > {
    > public ButtonFrame()
    > {
    > setTitle("ButtonTest");
    > setSize(300, 200);
    > buttonPanel = new JPanel();
    > makeButton("Red", Color.RED);
    > makeButton("Green", Color.GREEN);
    > makeButton("Blue", Color.BLUE);


    add(buttonPanel);

    > }
    >
    > private void makeButton(String name, final Color backgroundColor)
    > {
    > JButton button = new JButton(name);
    > buttonPanel.add(button);
    > button.addActionListener(new ActionListener()
    > {
    > public void actionPerformed(ActionEvent event)
    > {
    > buttonPanel.setBackground(backgroundColor);
    > }
    >
    > });
    >
    > }
    >
    > private JPanel buttonPanel;
    > }


    You need to add the buttonPanel to the JFrame.

    --

    Knute Johnson
    email s/nospam/knute2010/
    Knute Johnson, Feb 21, 2010
    #3
  4. Nessuno

    markspace Guest

    Knute Johnson wrote:
    >> public static void main( String[] args )
    >> {
    >> EventQueue.invokeLater(new Runnable()
    >> {
    >> public void run()
    >> {
    >> ButtonFrame frame = new ButtonFrame();
    >> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    frame.pack();

    >> frame.setVisible(true);

    >
    > You need to add the buttonPanel to the JFrame.



    The OP should also call pack() on the frame before it is displayed.
    markspace, Feb 22, 2010
    #4
  5. On 2/21/2010 4:59 PM, markspace wrote:
    > Knute Johnson wrote:
    >>> public static void main( String[] args )
    >>> {
    >>> EventQueue.invokeLater(new Runnable()
    >>> {
    >>> public void run()
    >>> {
    >>> ButtonFrame frame = new ButtonFrame();
    >>> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    >
    > frame.pack();
    >
    >>> frame.setVisible(true);

    >>
    >> You need to add the buttonPanel to the JFrame.

    >
    >
    > The OP should also call pack() on the frame before it is displayed.


    He calls setSize() in the JFrame constructor. Not the best method but
    it does work in this instance.

    --

    Knute Johnson
    email s/nospam/knute2010/
    Knute Johnson, Feb 22, 2010
    #5
  6. Nessuno

    Roedy Green Guest

    On Sun, 21 Feb 2010 15:26:57 -0800 (PST), Nessuno <>
    wrote, quoted or indirectly quoted someone who said :

    >
    >I am a newbie in Java. While learning from the Horstmann I have
    >modified a little example from the book. The problem is that the
    >buttons it creates are never shown.


    See http://mindprod.com/jgloss/jbutton.html
    and
    http://mindprod.com/jgloss/button.html

    for some similar sample code that does work.

    Hint: Every Component except the Frame/JFrame must be added to some
    container to be visible.
    --
    Roedy Green Canadian Mind Products
    http://mindprod.com

    When a newbie asks for help tracking a bug in a code snippet, the problem is usually is the code he did not post, hence the value of an SSCCE.
    see http://mindprod.com/jgloss/sscce.html
    Roedy Green, Feb 22, 2010
    #6
  7. Nessuno

    markspace Guest

    Knute Johnson wrote:

    > He calls setSize() in the JFrame constructor. Not the best method but
    > it does work in this instance.



    Thanks, I'd missed that. I think I might recommend calling pack() after
    adding all components, then calling setMinimumSize() instead of
    setSize(). That'll prevent the components from clipping if they take
    more space, but will enlarge the window if it happens to be smaller.
    markspace, Feb 22, 2010
    #7
  8. Nessuno

    Lew Guest

    Nessuno wrote:
    > public class ButtonTest
    > {
    > public static void main( String[] args )
    > {
    > EventQueue.invokeLater(new Runnable()
    > {
    > public void run()
    > {
    > ButtonFrame frame = new ButtonFrame();


    As others have answered your question, I will only add that you should not
    indent Usenet code examples with TAB characters, as they get ridiculously wide
    for most newsreaders and gravely harm readability. You want your code to be
    readable. Please use spaces, up to a maximum of four per indent level, for
    indentation.

    --
    Lew
    Lew, Feb 22, 2010
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Boban Dragojlovic

    Dynamic Buttons and Event Handlers, revisited

    Boban Dragojlovic, Jun 24, 2003, in forum: ASP .Net
    Replies:
    0
    Views:
    1,869
    Boban Dragojlovic
    Jun 24, 2003
  2. noone

    Handlers and dynamic buttons

    noone, Jan 27, 2004, in forum: ASP .Net
    Replies:
    1
    Views:
    303
    Natty Gur
    Jan 27, 2004
  3. Roger
    Replies:
    1
    Views:
    623
    GreggTB
    May 20, 2005
  4. Michael Dawson
    Replies:
    3
    Views:
    460
    Karl Seguin [MVP]
    Feb 22, 2006
  5. Replies:
    2
    Views:
    249
Loading...

Share This Page