How do I stretch a JButtonImage to use the whole cell in a GridLayout?

Hi,
I have a problem that is similar to what Edilmar_Alves had when posting the thread "I don't get to stretch an image in a JButton" in February 2009, though this is a bit different so I'm posting it in a new thread.
I also want to put an image in a JButton (or similar) in such a way that the image covers the whole area of the JButton. I've downloaded the SubMacroForms package and I'm trying to use a JButtonImage, where I set the size of it to exactly the size of the image I use.
It works if I just put the button in a JPanel using FlowLayout, but that's not what I really want. I need a 2 dimensional array of JButtonImages, since they will form the board of a game.Therefore I'm using a JPanel with GridLayout, to put the buttons in.
The problem is that when the JButtonImage buttons are added to the cells of the GridLayout, they don't cover the whole area of the cells (there's space at the top and at the bottom). What can I do about this? It's absolutely crucial that I fix this problem, because I can't have any space between the buttons (e.g. the images on them) since they will be forming something similar to a chess board.
Should I use some other layout or try to make my own Layout manager perhaps?
Any kind of help would be greatly appreciated!
Let me know if I should add any code.

If you want to fill the component (JButton/JLabel/and AbstractButton subclass/any third party component that supports setIcon/getWidth/getHeight) IMO the easiest way is to subclass ImageIcon and override paintIcon to do what you want.public class StretchIcon extends ImageIcon {
  public StretchIcon(Image image) {
    super(image);
  // other constructor/s as desired that call into the corresponding ImageIcon constructor
  public void paintIcon(Component c, Graphics g, int x, int y) {
    if(imageObserver == null) {
      g.drawImage(image, 0, 0, c.getWidth(), c.getHeight(), c);
    } else {
      g.drawImage(image, 0, 0, c.getWidth(), c.getHeight(), imageObserver);
}Alternatively you could write a class that implements Icon and wraps a ImageIcon.public class StretchIcon implements Icon {
  private ImageIcon icon;
  public StretchIcon(ImageIcon icon) {
    this.icon = icon;
  public void paintIcon(Component c, Graphics g, int x, int y) {
    if(icon.getImageObserver() == null) {
      g.drawImage(icon.getImage(), 0, 0, c.getWidth(), c.getHeight(), c);
    } else {
      g.drawImage(icon.getImage(), 0, 0, c.getWidth(), c.getHeight(), icon.getImageObserver());
  public int getIconWidth() {
    return icon.getIconWidth();
  public int getIconHeight() {
    return icon.getIconHeight();
Note: All code typed here, may contain typos or otherwise need debugging.
Depending on the layout in which this is to be used, you may want to return something else for the width and height.
db

Similar Messages

  • How do I enlarge my web page to use the whole screen?

    How do I enlarge my web page to use the whole computer screen?

    Reduce dock size or hide same.
    Also depends on what browser you're using  all have full screen modes.
    Safari :
    http://support.apple.com/kb/PH11941
    To enlarge an entire webpage so it uses the screen, click the arrows in the top-right corner of an app window:

  • How to sync 2 different Mac users using the same Apple ID and with out mixing each other info?

    How to sync 2 different Mac users using the same Apple ID and with out mixing each other info?
    We are two people using three difrent Macs, 1 Iphone and 1 Ipad with separate USERS  on each Mac but sharing the same Apple ID: xxxxxx
    I set up the first user to iCloud and it was OK but when I set up the second user to use iCoud the first users's info gets mixed with the second user's info?
    Do we have to set up a diffrent Apple ID for each other?
    Sometime ago I added my friends E mail (yyyyy) to the main Apple ID (xxxx) as for using his E mail account (to separate our e mail accounts, and it's working ok) but now when I try to create a new apple ID whith the same friend's e mail (yyyyyy)  it says that his mail (yyyyy) is already an apple ID when the Apple ID is really my E mail (xxxxx)... any clue?
    Thanks

    I believe because you migrated from a Nokia to an iPhone you need to register the Bn phone number with your Apple ID so it can be used for iMessage. The Pn number seems to be the only one registered
    Go here > https://appleid.apple.com/cgi-bin/WebObjects/MyAppleId.woa/
    Manage your Apple ID and see if that does the trick
    Hope that helps

  • How can i create multiple accounts but use the same itunes?

    how can i create multiple accounts but use the same itunes?

    Hi iCloud is Making Me Go Crazy,
    You will need to create a new Apple ID for your GameCenter and iCloud services.  You can continue to use the current Apple ID you share with your Mom for access to iTunes Store purchases if you wish. 
    Using your Apple ID for Apple services
    http://support.apple.com/kb/HT4895
    Frequently asked questions about Apple ID
    http://support.apple.com/kb/HT5622
    Cheers,
    - Judy

  • HT5538 How do you separate multiple iOS devices using the same apple id account for Face Time calls and iMessaging?

    How do you separate multiiple ios devices using the same apple id account for Face Time calls and iMessaging?

    The only way I have seen is to have each device use a if fervent email account, if they all are on the same email the FaceTime connection is either to a phone number or to an email address.  If they ar all on the same email, it is up to the user to decide which to use.

  • I want to download an audiobook, but my daughter has a giftcard credit on the account. How can I download my audiobook without using the money from her giftcard?

    I want to download an audiobook, but my daughter has a gift card on the account.  How can I download my audiobook without using the money from her gift card?

    go directly to your ibook app. and you're going to find it. it's only with ibooks app.
    best
    Olivier
    <Edited by Host>

  • How can i plot a histogram with using the results of Line Length

    PLS HELP.How can i prepare a histogram with using the results of line length code(It is somewhere in the middle).
    This is a final exam take-home question. I would appreciate if you can help?
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    import java.text.*;
    import java.io.File;
    public class WordAnalyser extends JFrame implements ActionListener
    private JMenuItem jmiAc, jmiSil, jmiCikis, jmiAnaliz, jmiHakkinda, jmiKullanim;
    private JTextArea jta1, jta2;
    private JFileChooser jFileChooser = new JFileChooser();
    File hafizada;
    File aktarilan = new File("Sonuc.txt");
    // Main method
    public static void main(String[] args)
    WordAnalyser frame = new WordAnalyser(); /* Ana ekran olusturulur */
    frame.setSize(400, 300); /* Degerleri belirlenir */
    frame.setVisible(true); /* Gorunebilirligi ayarlanir */
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    public WordAnalyser()
    setTitle("Serkan Ozgen Dosya Inceleme Programina Hos Geldiniz");
    JMenuBar mb = new JMenuBar();
    setJMenuBar(mb);
    JMenu fileMenu = new JMenu("Dosya");
    fileMenu.setMnemonic('F');
    mb.add(fileMenu);
    JMenu helpMenu = new JMenu("Degerlendirme");
    helpMenu.setMnemonic('H');
    mb.add(helpMenu);
    JMenu kullanimMenu = new JMenu("Kullanim Kilavuzu");
    mb.add(kullanimMenu);     
    fileMenu.add(jmiAc = new JMenuItem("Ac", 'A'));
    fileMenu.add(jmiSil = new JMenuItem("Sil", 'S'));
    fileMenu.add(jmiCikis = new JMenuItem("Cikis", 'C'));
    helpMenu.add(jmiAnaliz = new JMenuItem("Analiz", 'D'));
    helpMenu.add(jmiHakkinda = new JMenuItem("Hakkinda", 'H'));
    kullanimMenu.add(jmiKullanim = new JMenuItem("Kullanim"));     
    getContentPane().add(new JScrollPane(jta1 = new JTextArea()), BorderLayout.CENTER);
    getContentPane().add(jta2 = new JTextArea(), BorderLayout.SOUTH);
    jmiAc.addActionListener(this);
    jmiSil.addActionListener(this);
    jmiCikis.addActionListener(this);
    jmiAnaliz.addActionListener(this);
    jmiHakkinda.addActionListener(this);
    jmiKullanim.addActionListener(this);
    public void actionPerformed(ActionEvent e)
    String actionCommand = e.getActionCommand();
    if (e.getSource() instanceof JMenuItem)
    if ("Ac".equals(actionCommand))
    Ac();
    else if ("Sil".equals(actionCommand))
    Sil();
    else if ("Cikis".equals(actionCommand))
    System.exit(0);
    else if ("Analiz".equals(actionCommand))
    sayim();
    else if ("Hakkinda".equals(actionCommand))
    JOptionPane.showMessageDialog(this,
    "!!!! Bu program text analizi gerceklestirir. Her hakki saklidir SERKAN OZGEN!!!!",
    "Bu program hakkinda",
    JOptionPane.INFORMATION_MESSAGE);
    else if ("Kullanim".equals(actionCommand))
         JOptionPane.showMessageDialog(this,
         " Ilk once dosya menusunden Ac i tiklayarak analiz etmek istediginiz Dosyayi seciniz (Lutfen uzantisi *.txt \nveya *.log olsun). Daha sonra Degerlendirme menusunden analizi tiklarsaniz dosyanizda kac adet rakam, harf, \ncumle ve kelime oldugunu gorebilirsiniz. Simdiden kolay gelsin",
         "Programin kullanim detaylari",
         JOptionPane.INFORMATION_MESSAGE);
    private void Ac()
    if (jFileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
    hafizada = jFileChooser.getSelectedFile();
    Ac(hafizada);
    // Acilan Dosyayi ana ekranda gostermeye yariyan bir method
    private void Ac(File file)
    try
    // Acilan dosyayi okuma ve ana ekranda gosterme
    BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
    byte[] b = new byte[in.available()];
    in.read(b, 0, b.length);
    jta1.append(new String(b, 0, b.length));
    in.close();
    catch (IOException ex)
    // Temizle tusunun hangi ekranlara etki edecegini secme
    private void Sil()
    jta1.setText("");
    jta2.setText("");
    private void sayim()
    int buff;
    int sayac = 0;
    int Cumleler = 0;
    int Kelimeler = 0;
    int Karakterler = 0;
    int Satirlar = 0;
    int Rakamlar = 0;     
    boolean start = true;
    int linenum = 0;     
    try
    FileInputStream instream = new FileInputStream(hafizada);
    FileOutputStream outstream = new FileOutputStream(aktarilan);
         BufferedReader infile = new BufferedReader(new InputStreamReader(new FileInputStream(hafizada)));
    PrintStream out = new PrintStream(outstream);
         out.println("---Kelime Avcisinin Sonuclari---");
         String line = infile.readLine();
         while (line != null){
         int len = line.length();
         linenum++;
         line = infile.readLine();
         out.println("Line Length :"     + linenum + "\t" +len);
    while ((buff=instream.read()) != -1)
    switch((char)buff)
    case '?': case '.': case '!': /* Eger "?", "." veya "!" gorurse program cumleleri ve kelimeleri arttirir*/
    if (start == false)
    Cumleler++;
    Kelimeler++;
    start = true;
    break;
    case ' ': case '\t': case ',': case ';': case ':': case'\"': case'\'': /* Eger /t,;:\ ve \" bu isarteleri goruruse program kelimeleri arttirir */
    if (start == false)
    Kelimeler++;
    start = true;
    break;
              case 'n': case '\n': /* Eger \n gorurse satirlari arttirir */
              if (start == false)
                   Satirlar++;
                   Kelimeler++;
                   start = true;
              break;
    default:
    if (((char)buff >= 'a' && (char)buff<='z')|| /*a-z, A-Z veya - degerlerini gorurse karakterler arttirilir */
    ((char)buff >= 'A' && (char)buff<='Z')||
    ((char)buff == '-'))
    Karakterler++;
    if ((Kelimeler % 50) == 49)
    if (start == true)
                   out.println();     
    out.print((Kelimeler+1) + " ");
    out.print((char)buff);
    start = false;
              if ((char)buff >='0' && (char)buff <='9') {  /* 0-9 gorurse rakamlari arttiri */
                   Rakamlar++; }
    }// switch
         }//while
    instream.close();
    out.println();
    out.println();
    out.println("Karakter sayisi: " + Karakterler);
         out.println("Kelime sayisi: " + Kelimeler);
    out.println("Cumle sayisi: " + Cumleler);
         out.println("Satir sayisi: "+ Satirlar);
         out.println("Rakam sayisi: "+ Rakamlar);
    outstream.close();
    try
    BufferedInputStream in = new BufferedInputStream(new FileInputStream(aktarilan));
    byte[] b = new byte[in.available()];
    in.read(b, 0, b.length);
    jta2.append(new String(b, 0, b.length));
    in.close();
    catch (IOException ex)
    catch (Exception e)
    System.out.println(e);
    }

    Why is it that you're not interested in IOExceptions?
    catch (IOException ex)
    } Empty catch blocks is a hallmark of foolish Java code. At least print out the stack trace.
    %

  • How can I connect personal hotspot to use the internet from my phone on my laptop?

    I do not have internet at home and want to be able to connect using the personal hotspot on my phone. How do i do this??

    How much would be a month?
           From: Verizon Wireless Customer Support <[email protected]>
    To: kelly johnson <[email protected]>
    Sent: Wednesday, October 8, 2014 12:02 PM
    Subject:  - How can I connect personal hotspot to use the internet from my phone on my laptop?
    #yiv3595356488 img
    |  
    |
      | 
    A message from the Verizon Wireless Community
      |
    |   |
    How can I connect personal hotspot to use the internet from my phone on my laptop?
    created by Verizon Wireless Customer Support in iPhone 4S - View the full discussion                  Hello kmj65
    Thanks for replying. The plan you have it would be an additional charge to add the hotspot feature. It's not free with the Nationwide plan. You would need to add the feature online at www.verizonwireless.com/myverizon
    JoeL_VZW
    Follow us on Twitter @VZWSupport   Reply to this message by replying to this email -or- go to the message on Verizon Wireless Community Start a new discussion in iPhone 4S by email or at Verizon Wireless Community


    © 2014 Verizon Wireless
    Verizon Wireless
    One Verizon Way
    Mail Code: 180WVB
    Basking Ridge, NJ 07920
    Not interested in these emails anymore, or want to change how often they come? Update your email preferences by visiting https://community.verizonwireless.com/user-preferences!input.jspa.
      |
    We respect your privacy. Please review our privacy policy for more information
    about click activity with Verizon Wireless and links included in this email.
      |

    |

  • HT201596 80 % of my itunes files are located on a 3tb external drives; the remainder on a 4TB drive. ALL my files are on the 4TB. How do i get iTunes just to use the files on the 4tb drive so I can use the 3tb for other purposes   THX  .

    Hi,  80 % of my itunes files are located on a 3tb external drives; the remainder on a 4TB drive as I ran pout of space. ALL my files are on copied on to the 4TB drive . How do I get iTunes just to use the files on the 4tb drive so I can use the 3tb for other purposes   THX  .

    Select the desired location in preferences, then consolidate the media files to it.
    iTunes 12 for Mac: Change where your iTunes files are stored - http://support.apple.com/kb/PH19507 - Unfortunately this is misnamed.  It should say "Change where your media files but not where your library files are stored" - more information at: https://discussions.apple.com/message/22026652#22026652 - and steps 5-8 in https://discussions.apple.com/message/24491967#24491967

  • Digital audio input via mini jack/toslink from ADA, monitored via USB audio output... is this do-able? I know digital audio input should be okay but how do I monitor it, apart from using the internal speakers?

    Digital audio input via mini jack/toslink from ADA converter, monitored via USB audio output to amplifier... is this do-able? I know digital audio input should be okay but how do I monitor it, apart from using the internal speakers?

    You can output audio thru HDMI, with appropriate adapter.
    You can use additional cheap external usb audio for monitoring.

  • How to delete an operation from order using the bapi

    Can somebody please tell me how to delete an operation from order using the bapi
    BAPI_ALM_ORDER_MAINTAIN.
    Following was the test data for the BAPI.
    000000 OPERATION DELETE 0000040052810070
    000000 SAVE 0000040052810070
    Even I tried entering the operation table. The BAPI control ends fine, but when I check the order using IW32, the operation still exists.
    So, can you please tell me where Iam going wrong.

    Hi Subash Mohanvel,
    Check bapireturn parameter of the bapi BAPI_ALM_ORDER_MAINTAIN after execution of the code , and if there is no error message in the return table then call bapi_Transaction_commit.
    Unless you call this database saving of the records/values will not get reflected in the system.
    Hope that helps.
    Regards
    Kapadia
    ***Assigning points is the way to say thanks in SDN.***

  • I purchased the teacher and student lightroom 5. I put in my code and uploaded my evidence to show that I am a teacher. I am guessing it was sent through to someone. How do I know when I can use the software? I don't understand what to do next.

    I purchased the teacher and student lightroom 5. I put in my code and uploaded my evidence to show that I am a teacher. I am guessing it was sent through to someone. How do I know when I can use the software? I don't understand what to do next.

    Please refer below link for more information
    Education FAQ

  • How do I turn off suggested videos using the YouTube widget?

    How do I turn off suggested videos using the YouTube widget?

    That's not currently an option in the Muse youtube widget.
    We'll add support for that option in a future release of Muse.

  • I currently have a mac osx, and my CC keeps coming saying its expired, when it should be running the CS6 design standard.  So how do I get my platform to use the CS6 as my default instead of the CC one.

    I currently have a mac osx, and my CC keeps coming saying its expired, when it should be running the CS6 design standard.  So how do I get my platform to use the CS6 as my default instead of the CC one.

    Sign in, activation, or connection errors | CS5.5 and later
    And you can change the default program for a file type under File --> Info.
    Mylenium

  • In iPhoto, how can I find a particular event using the search function?, In iPhoto, how can I find a particular event using the search function?

    In iPhoto, how can I find a particular event using the search function?

    NO - read my last answer over a year ago
    That is because iPhoto is all about photos - not about files
    You do not access the piles in iphoto - you access the photos using either iPhoto or the media browser - see this user tip for photo access details
    LN

Maybe you are looking for