кнопки Java-апплета - PullRequest
       6

кнопки Java-апплета

2 голосов
/ 15 июля 2010

ОК, поэтому у меня есть этот апплет, подобный этому

  • BorderLayout.CENTER - (Внутри этого находится JPanel)
  • BorderLayout.EAST - (Внутри это новый GridLayout (4, 5)
  • BorderLayout.SOUTH - (Внутри это TextArea)

В любом случае, в апплете, я должен НАЖАТЬ по кнопкам, чтобы увидеть их. Они нерисовать там, я думаю, но я добавляю их в метод init () ... так что я не знаю, что я делаю неправильно и почему он это делает.

setLayout( new BorderLayout() );
JPanel invOne = new JPanel(new GridLayout(5,4));
JPanel game = new JPanel();
add(invOne, BorderLayout.EAST);
add(game, BorderLayout.CENTER);
add(c, BorderLayout.SOUTH);

invOne.setBounds(416,0, 60, 28);

for (int i = 0,  j = 20;  i < 20;  i = i+1, j = j-1)  {
   invOne.add(new JButton("SLOT " + j));
   invOne.setBounds(32,32,100,100);
   invOne.setFocusable(false);
}

game.setBounds(0,0, 416, 288);
repaint();

Ответы [ 4 ]

2 голосов
/ 15 июля 2010

Что вы пытаетесь выполнить со всеми setBounds() вызовами?Либо вы позволяете pack() устанавливать размер панели в соответствии с тем, что внутри, либо вы устанавливаете границы один раз в том месте, где вы хотите видеть эту панель.Особенно звонки с размером 32x32 пикселей вообще не помогают.


РЕДАКТИРОВАТЬ:

Я обнаружил следующие проблемы:

  • Какупоминается еще один постер: вы смешиваете компоненты Swing и AWT.Это не работает хорошо.По сути, если некоторые из компонентов, которые вы используете, имеют в начале букву «J», вам нужно использовать букву «J» для всех из них.AWT сейчас считается "старой школой".Это немного сбивает с толку, потому что некоторые классы и компоненты, используемые в GUI, не имеют J.Я думаю, вам нужно тщательно поработать с хорошими примерами или посмотреть на классы.

  • По какой-то причине апплет не хотел работать хорошо, пока я не дал явное число строк / столбцов дляTextArea (теперь называется JTextArea).Я изменил new TextArea() на new JTextArea(3,20).

  • Самой большой проблемой мог быть пустой метод paint().Интересно, как апплет вообще что-то отображал?Вы могли бы удалить метод paint();Я исправил это, вызвав super.paint().

  • Наконец, имена классов (например, bl) должны начинаться с заглавных букв.Компилятор в IdeOne ворчал на меня за это.

Вот мой фиксированный код .

Счастливого взлома!

2 голосов
/ 15 июля 2010

Найдено одна страница (на немецком языке) , которая описывает ту же проблему: виджеты JButton отображаются только после наведения на них курсора.

Проблема заключалась в том, что компоненты / виджеты AWT и Swing были смешаны. Я не вижу по вашему фрагменту кода, так ли это, но если у вас есть java.awt.* импорт, отключите их, реорганизуйте ваш код, чтобы использовать только классы Swing, и попробуйте снова / надеюсь на лучшее.

Другое предложение состояло в том, чтобы явно указать setVisible(true) для каждой кнопки, но спрашивающий сказал, что это не помогло в его случае.

1 голос
/ 15 июля 2010

Вы используете компоненты Swing в апплете. Вы должны использовать JApplet. Просто измените extends Applet на extends JApplet.

1 голос
/ 15 июля 2010

После добавления всех ваших компонентов в панель, вы явно вызываете метод "pack ()" (или "repaint ()")? Не вызов этих методов может привести к графическим проблемам в ваших фреймах ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...