GridBagLayout - petla

Odpowiedz Nowy wątek
2015-01-05 12:27
0

Witam
Chciałbym stworzyć małą gierkę turową która odbywałaby się na planszy 10x10
Planuje zastosować do tego GridBagLayout ale niestety mam problem, ponieważ chciałbym aby przyciski były tworzone w pętli ale niestety
program kompiluje sie ale nie odpala....
Wrzucam przykład dla planszy 3x3 :

 private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GridBagLayout gridBagLayout = new GridBagLayout();
        gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0};
        gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0};
        gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
        gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
        frame.getContentPane().setLayout(gridBagLayout);
 
        JLabel lblKamil = new JLabel("Kamil");
        GridBagConstraints gbc_lblKamil = new GridBagConstraints();
        gbc_lblKamil.insets = new Insets(0, 0, 5, 5);
        gbc_lblKamil.gridx = 3;
        gbc_lblKamil.gridy = 0;
        frame.getContentPane().add(lblKamil, gbc_lblKamil);
 
        JButton btnField [][] = null;
        GridBagConstraints gbcBtnField [][] = null;
        for(int i = 1 ; i<=3;i++){
            for(int j = 1 ; j<=3 ; j++){
                btnField[i][j] = new JButton("Button");
                gbcBtnField[i][j] = new GridBagConstraints();
                gbcBtnField[i][j].gridx = i;
                gbcBtnField[i][j].gridy = j;
                frame.getContentPane().add(btnField[i][j],gbcBtnField[i][j]);
 
            }
 
        }

A moje drugie pytanie w jaki sposob mogę ustalić wielkość tych buttonów ? xd ponieważ setSize nie działa :/

Pozostało 580 znaków

2015-01-05 13:30
  1. Nie stworzyłeś tablicy buttonów, tylko ją zadeklarowałeś.
  2. Spróbuj metody setPreferredSize/setMinimumSize/setMaximumSize

Pozostało 580 znaków

2015-01-06 14:49
0
  1. Dzięki zadziałało :) Wrzucam kod dla potomnych
    </code></pre></li>
    </ol>
    <p>JButton  [][]btnField = new JButton[3][3];<br />
    GridBagConstraints gbcBtnField [][] = new GridBagConstraints[3][3];<br />
    for(int i = 0 ; i<3;i++){<br />
    for(int j = 0 ; j<3 ; j++){<br />
    btnField[i][j] = new JButton("Button" +i+j);<br />
    gbcBtnField[i][j] = new GridBagConstraints();<br />
    gbcBtnField[i][j].gridx = i;<br />
    gbcBtnField[i][j].gridy = j+1;<br />
    frame.getContentPane().add(btnField[i][j],gbcBtnField[i][j]);</p>
    <pre><code>        }
    2. 
    Zadziałało setPrefferSize :) Ale tu mam kolejne pytanko mianowicie. Dodałem jeszcze "pack" do Frame by mi ustawiał odpowiednio wielkie okno. Ale jest problem gdy zaczynam  zwiększać Frame. Kontrolki wtedy "wariuja", zwiekszaja swoje odleglosci itd. Wrzucam screena w zalaczniku 
    
    ```java
    private void initialize() {
            frame = new JFrame();
            frame.setBounds(100, 100, 450, 300);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            GridBagLayout gridBagLayout = new GridBagLayout();
            gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0};
            gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0};
            gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
            gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
            frame.getContentPane().setLayout(gridBagLayout);
            Dimension sizeFrame = new Dimension(100,300);
            //frame.setPreferredSize(sizeFrame);
            JLabel lblKamil = new JLabel("Kamil");
            GridBagConstraints gbc_lblKamil = new GridBagConstraints();
            gbc_lblKamil.insets = new Insets(0, 0, 5, 5);
            gbc_lblKamil.gridx = 3;
            gbc_lblKamil.gridy = 0;
    
            frame.getContentPane().add(lblKamil, gbc_lblKamil);
    
            JButton  [][]btnField = new JButton[10][10];
            GridBagConstraints gbcBtnField [][] = new GridBagConstraints[10][10];
            for(int i = 0 ; i<10;i++){
                for(int j = 0 ; j<10 ; j++){
                    btnField[i][j] = new JButton("Button" +i+j);
                    Dimension preferredSize = new Dimension(50,50);
                    btnField[i][j].setPreferredSize(preferredSize);
                    gbcBtnField[i][j] = new GridBagConstraints();
                    gbcBtnField[i][j].gridx = i;
                    gbcBtnField[i][j].gridy = j+1;
                    frame.getContentPane().add(btnField[i][j],gbcBtnField[i][j]);
                    frame.pack();
                }
    
            }
    
        } 

Pozostało 580 znaków

2015-01-06 14:52
0

To może zabroń zabaw z rozmiarem okna.

frame.serResizable(false);

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2015-01-06 14:58
0

ustaw layout w ten sposób

frame.setLayout(new GridBagLayout());

Nie ustawiaj mu bezsensownych wartości

gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0};
gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0};
gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};

Pozostało 580 znaków

2015-01-06 15:26
0

No właśnie chodziło oto by użytkownik mógł zmienić rozmiar (takie wytyczne od wykladowcy).
Garai Masz racje wystarczyło usunięcie tych czterech linijek.
A przy okazji, jaka zatem jest różnica między

frame.setLayout(new GridBagLayout()); 

a

frame.getContentPane().setLayout(gridBagLayout); 

bo działanie mają takie same a spotkałem się z oboma zapisami

edytowany 1x, ostatnio: bogdans, 2015-01-06 20:02

Pozostało 580 znaków

2015-01-06 15:37
0

@bogdans wspominał, że nie ma różnicy dla javy większej niż 1.4.
Ja to zapisałem w ten sposób, ponieważ nie potrzebna już Ci była zmienna gridBagLayout

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0