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?
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.
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.
Tip: Use pixels if you want to set a fixed width and use percent for responsive buttons (e.g. 50% of its parent element).
To change the font size of a button, use the font-size property.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With