Search code examples
javaswinglayoutjbuttonborder-layout

JButton Small Button


I am writing a swing program. But the problem is that the JButton I want to be small. It should be up to me to decide its height and width but the code below creates a long horizontal button.

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

public class SwingExample 
{
         //Create the GUI and show it. For thread safety, this method should be
        //invoked from the event-dispatching thread

        private static void createAndShowGUI()
        {
            //create and setup the window
            JFrame frame=new JFrame("Swing Demo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            //Set the size of the window
            frame.setPreferredSize(new Dimension(300,300));            


            //Centre the window on the screen
            WinUtilities wu=new WinUtilities();
            wu.centerWindow(frame);

            //Create a panel
            JPanel panel=new JPanel(new BorderLayout());

            //Create three buttons

                //Button1
                    JButton But1=new JButton("Add");
                    But1.setText("Add Data");
                    But1.setSize(new Dimension(10,20)); //Using it has no effect
                    But1.setMnemonic('A');
                    But1.setMargin(new Insets(12,7,20,10)); //Using it has no effect
                    But1.setBorder(null); //Using it has no effect
                    panel.add(But1,BorderLayout.WEST);

                //Button2
                    JButton But2=new JButton("Edit");
                    But2.setText("Edit Data");
                    But2.setMnemonic(KeyEvent.VK_E);
                    But2.setPreferredSize(new Dimension(5,5));

                    panel.add(But2,BorderLayout.CENTER);

               //Button3
                    JButton But3=new JButton("Display");
                    But3.setText("Display Data");
                    But3.setMnemonic(KeyEvent.VK_D);
                    But3.setPreferredSize(new Dimension(5,5));
                    panel.add(But3,BorderLayout.EAST);


            //Set window characteristics
            frame.setContentPane(panel);
            //frame.add(panel);
            frame.pack();



            //Display the window
            frame.setVisible(true);
        }

        public static void main(String args[])
        {
            //Schedule a job for the event dispatching thread

            //creating and showing this application's GUI
            javax.swing.SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    createAndShowGUI();
                }
            });

        }
}

class WinUtilities
{
    public void centerWindow(JFrame frm)
    {
        frm.setLocationRelativeTo(null);
    }
}

Please Help


Solution

  • for example

    enter image description here

    suggestion

    • JPanel has implemented in API FlowLayout (pretty accepting PreferredSize),

    • then BoderLayout could be wrong LayoutManager,

    • or to use GridLayout (then all JButtons will be have the same size, based on largest Item)

    code

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class SwingExample {
    
        private static void createAndShowGUI() {
            JFrame frame = new JFrame("Swing Demo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JPanel panel = new JPanel();
            JButton but1 = new JButton("Add");
            but1.setText("Add Data");
            but1.setMnemonic('A');
            but1.setBorderPainted(false);
            but1.setBackground(Color.red);
            but1.setBorder(null);
            but1.setFocusable(false);
            but1.setMargin(new Insets(0, 0, 0, 0));
            //but1.setContentAreaFilled(false);
            panel.add(but1);
            JButton but2 = new JButton("Edit");
            but2.setText("Edit Data");
            but2.setMnemonic(KeyEvent.VK_E);
            panel.add(but2);
            JButton but3 = new JButton("Display");
            but3.setText("Display Data");
            but3.setMnemonic(KeyEvent.VK_D);
            panel.add(but3);
            frame.add(panel);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    
        public static void main(String args[]) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
    
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }