Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I set size of a button?

I put my buttons in a JPane with GridLayout. Then I put JPanel into another JPanel with BoxLayout.Y_AXIS. I want buttons in the GridLayout to be square. I use tmp.setSize(30,30) and it does not work. I also try to use new GridLayout(X, Y, 4, 4) but I cannot figure out what X and Y are. So, what is the correct way to do this stuff?

ADDED:

I still cannot solve the problem. Here is the code of what I am trying to do:

import javax.swing.*; import java.awt.*;  public class PanelModel {     public static void main(String[] args) {         JFrame frame = new JFrame("Colored Trails");         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          JPanel mainPanel = new JPanel();         mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));          JPanel firstPanel = new JPanel();         firstPanel.setLayout(new GridLayout(4, 4));         JButton btn;         for (int i=1; i<=4; i++) {             for (int j=1; j<=4; j++) {                 btn = new JButton();                 btn.setPreferredSize(new Dimension(100, 100));                 firstPanel.add(btn);             }         }          JPanel secondPanel = new JPanel();         secondPanel.setLayout(new GridLayout(5, 13));         for (int i=1; i<=5; i++) {             for (int j=1; j<=13; j++) {                 btn = new JButton();                 btn.setPreferredSize(new Dimension(40, 40));                 secondPanel.add(btn);             }         }          mainPanel.add(firstPanel);         mainPanel.add(secondPanel);         frame.add(mainPanel);          frame.setSize(400,600);         frame.setVisible(true);     } } 

The problem is that Java tries to make width of the firstPanel and secondPanel equal! Moreover, Java tries to to fill all height of the window. How can I remove this behavior?

like image 933
Roman Avatar asked Mar 29 '10 09:03

Roman


People also ask

How do I set button size?

Editing the size of a button in HTML is relatively easy. In the simplest form you just have to add a 'style' attribute to the button element containing your desired height and width values in pixels. It goes something like this. Alternatively, you can add a 'class' to button and add your styles in a CSS file.

How do you style a button size?

Style can be applied through JS using the style object available on an HTMLElement. To set height and width to 200px of the above example button, this would be the JS: var myButton = document. getElementById('submit-button'); myButton.

How do I fix a button size in HTML?

Tip: Use pixels if you want to set a fixed width and use percent for responsive buttons (e.g. 50% of its parent element).

What properties change the size of a button?

To change the font size of a button, use the font-size property.


1 Answers

The following bit of code does what you ask for. Just make sure that you assign enough space so that the text on the button becomes visible

JFrame frame = new JFrame("test"); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); JPanel panel = new JPanel(new GridLayout(4,4,4,4));  for(int i=0 ; i<16 ; i++){     JButton btn = new JButton(String.valueOf(i));     btn.setPreferredSize(new Dimension(40, 40));     panel.add(btn); } frame.setContentPane(panel); frame.pack(); frame.setVisible(true); 

The X and Y (two first parameters of the GridLayout constructor) specify the number of rows and columns in the grid (respectively). You may leave one of them as 0 if you want that value to be unbounded.

Edit

I've modified the provided code and I believe it now conforms to what is desired:

JFrame frame = new JFrame("Colored Trails"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));  JPanel firstPanel = new JPanel(); firstPanel.setLayout(new GridLayout(4, 4)); firstPanel.setMaximumSize(new Dimension(400, 400)); JButton btn; for (int i=1; i<=4; i++) {     for (int j=1; j<=4; j++) {         btn = new JButton();         btn.setPreferredSize(new Dimension(100, 100));         firstPanel.add(btn);     } }  JPanel secondPanel = new JPanel(); secondPanel.setLayout(new GridLayout(5, 13)); secondPanel.setMaximumSize(new Dimension(520, 200)); for (int i=1; i<=5; i++) {     for (int j=1; j<=13; j++) {         btn = new JButton();         btn.setPreferredSize(new Dimension(40, 40));         secondPanel.add(btn);     } }  mainPanel.add(firstPanel); mainPanel.add(secondPanel); frame.setContentPane(mainPanel);  frame.setSize(520,600); frame.setMinimumSize(new Dimension(520,600)); frame.setVisible(true); 

Basically I now set the preferred size of the panels and a minimum size for the frame.

like image 108
Kris Avatar answered Sep 28 '22 02:09

Kris