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
for example
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();
}
});
}
}