Re: Swing Question: Dynamic Labels
Mark Space wrote:
KDawg44 wrote:
Is there an easy way to have a textfield take a number, then
dynamically draw the board using an array of labels? Or would I want
Maybe. You will have to learn some Java -- there's no super easy, but
That was supposed to be "no super easy way."
you might be able to use the GridLayout. Try reading this for now, you
are going to need it.
Yep, works, although you still have some work to do.
First, use JOptionPane.showInputDialog() to get the size of the board.
String result = JOptionPane.showInputDialog(
"Enter the number of squares per side", "5" );
Then use the GridLayout() to add your labels. This is text, but you
could make an Icon and get something like graphics (probably). You
*must* learn how JPanels, JFrames and a layout manager works, so hit
that tutorial link I have you. Especially JFrames.
A grid layout lets you add() components, starting in the upper left hand
corner, going left to right, and then fills each row completely before
going to the next one. It's very simple, but probably all you need.
You can fill it with two simple for loops.
Here you go, good luck.
package simpleswinggrid;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Board extends JFrame
{
public static void main(String[] args) {
String result = JOptionPane.showInputDialog(
"Enter the number of squares per side", "5" );
int sides = Integer.parseInt( result );
if( sides > 10 ) {
throw new RuntimeException( "Sides can't exceed 10" );
}
new Board( sides ).setVisible( true );
}
public Board( int sides ) {
super( "A Sample Game Board");
GridLayout layout = new GridLayout( sides, sides );
JPanel panel = new JPanel( layout );
for( int i = 0; i < sides; i++ ) {
for( int j = 0; j < sides; j++ ) {
panel.add( new JLabel( "("+i+","+j+")" ) );
}
}
setContentPane( panel );
pack();
setDefaultCloseOperation( EXIT_ON_CLOSE );
setLocationRelativeTo(null);
}
}