2015-06-06 5 views
1

Я в настоящее время новичок в java, и я ищу какую-то помощь, если вы не возражаете. Заранее прошу прощения за ссылки на Google Drive, моя популярность не позволяла мне отправлять фотографии.Проблемы с GridBagLayout в JAVA

Прежде всего, я знаю, что другие сообщения на эту тему уже существуют, но я не смог найти правильный ответ.

Моя цель состоит в том, чтобы использовать GridBagLayout, чтобы получить что-то вроде этого: https://drive.google.com/file/d/0BxoqzZbxl2ZoVWpqSTB5cjJCdkE/view?usp=sharing

Я использую JLabel для текстов областей и сетка представляет собой сетку из JButton (это 2 размера таблица JButton).

private String stateText = new String("STATE TEXT"); 
private String messageText = new String("MESSAGE TEXT"); 
BUTTONS = new JButton[3][3]; 

Я создал основной контейнер, менеджер компоновки и GridBagConstraints:

JPanel content = new JPanel(); 
content.setPreferredSize(new Dimension(200,150)); 
content.setLayout(new GridBagLayout()); 
GridBagConstraints gbc = new GridBagConstraints(); 

Затем я инициализированы ДжиБиСи:

gbc.gridx = 0; 
gbc.gridy = 0; 

An d я начал место в JLabels:

stateField.setText(stateText); 
stateField.setPreferredSize(new Dimension(50, 50)); 
stateField.setBorder(BorderFactory.createLineBorder(Color.cyan)); 
//la taille en hauteur et en largeur 
gbc.gridheight = 1; 
gbc.gridwidth = 1; 
content.add(stateField, gbc); 

messageField.setText(messageText); 
messageField.setPreferredSize(new Dimension(50, 100)); 
messageField.setBorder(BorderFactory.createLineBorder(Color.cyan)); 
gbc.gridx = 0; 
gbc.gridy = 1; 
gbc.gridwidth = 1; 
gbc.gridheight = 2; 
//Celle-ci indique que la cellule se réplique de façon verticale 
gbc.fill = GridBagConstraints.VERTICAL; 
content.add(messageField, gbc); 

с MessageText и stateText, два струнных.

Моя проблема заключается в том, что я использовал 2 «для», чтобы поместить мой КНОПКИ [3] [3], как это:

for(int i=1; i<4; i++) 
for(int j=0; j<3; j++) 
{ 

    gbc.gridy = j; 
    gbc.gridx = i; 

    gbc.gridheight=j+1; 
    gbc.gridwidth=i+1; 

    if(i==3) 
    { 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 
    } 
    if(j==2) 
    { 
     gbc.gridheight = GridBagConstraints.REMAINDER; 
    } 
    gbc.gridy = j-1; 
    gbc.gridx = i-1; 

    content.add(BUTTONS[i-1][j], gbc); 
} 

В конце концов, результат был не один и следовало ожидать, на самом деле , исполнение дал мне это: https://drive.google.com/file/d/0BxoqzZbxl2ZoY3pRMVh1enVSWm8/view?usp=sharing

enter image description here

Не могли бы вы сказать мне, где я ошибаюсь? Если есть лучший способ сделать это?

+0

Лучшим способом было бы использовать [GUI builder.] (Https://netbeans.org/features/java/swing.html) – markspace

+1

Нет, лучше было бы использовать MigLayout. Кроме того, никогда не устанавливайте размеры или предпочтительные размеры текстовых компонентов, таких как JTextAreas. Гораздо лучше установить свойства столбца и строки. –

+0

Спасибо, я попробую это –

ответ

0

У Вас есть ошибка в этом коде:

gbc.gridy = j-1; 
gbc.gridx = i-1; 

content.add(BUTTONS[i-1][j], gbc); 

Gridy становится значение -1 для некоторых кнопок. (всякий раз, когда j = 0)

Также мне непонятно, хотите ли вы, чтобы кнопки 3x3 формировали сетку одинаковых размеров или вы хотели бы иметь специальные размеры для некоторых кнопок.

Если вы хотите, чтобы кнопки 3x3 имели одинаковые размеры. Будет проще построить еще один JPanel с GridLayout (3,3), где вы добавите эти кнопки. Затем вы можете добавить новый JPanel на свою основную панель одним выстрелом.

Смежные вопросы