Как сделать макет для JApplet - PullRequest
2 голосов
/ 18 февраля 2012

Я создаю простую игру судоку. Так как это мой первый «большой», я хочу сделать все сам (без дизайнера интерфейса NetBeans, который я обычно использую для создания GUI). Поэтому для GUI я создал класс, расширяющий JApplet, и нарисовал простое поле sudoku в методе paint ().

Теперь мне нужно создать 81 текстовое поле, каждое из которых будет занимать 1 число. Как мне расположить их на экране? Кроме того, я думал о создании массива, чтобы я мог изменить матрицу полей ввода с помощью одной для цикла.

1 Ответ

6 голосов
/ 18 февраля 2012

Предложения:

  • Никогда не рисуйте напрямую в методе paint компонента верхнего уровня, такого как JApplet, JFrame, JDialog и т. П.
  • Если вынужно сделать собственное рисование, вместо этого сделайте это в переопределении метода paintComponent(...) компонента, который расширяет JComponent, такой как сам JPanel или JComponent.
  • Ваша проблема на самом деле не требует пользовательского рисования, по крайней мере, покаи гораздо лучше и проще решается другими способами.
  • Используйте такие компоненты, как JLabels, JTextFields и т. д. ... и размещайте их с помощью менеджеров компоновки Swing (другие средства, отмеченные выше).Вы можете найти руководство по его использованию здесь: Компоновка компонентов в контейнере
  • Макеты, на которых нужно сосредоточиться в первую очередь, включают GridLayout для ваших "ячеек" Судоку и BorderLayout для всего графического интерфейса.Избегайте GridBagLayout и GroupLayout, по крайней мере, при запуске.
  • Помните, что вы можете создавать сложные приложения, вкладывая JPanels, каждое из которых использует простой менеджер компоновки.
  • Простой способ «рисовать» линии сеткиэто установить цвет фона JPanel, который использует GridLayout и держит JTextFields в Color.BLACK, и обязательно предоставьте вашему GridBagLayout небольшой вертикальный и горизонтальный зазор, чтобы черный проходил сквозь.Перечисленные выше учебники покажут вам, как это сделать.
  • Если бы это было мое приложение, я бы направил свой графический интерфейс в сторону создания JPanel, в котором содержалось приложение.Затем, если бы мне нужно было отобразить его в JApplet, я бы создал очень маленькое приложение, которое подклассов JApplet, а затем в методе init() добавил мою Судану JPanel в contentPane JApplet.Таким образом, если бы я вместо этого хотел отобразить свое приложение в JFrame, все, что мне нужно было бы сделать, - это создать еще один небольшой класс, который создает JFrame, и добавить мой Судану JPanel в contentPane JFrame, а затем вызвать pack() наJFrame, а затем setVisible(true).

Что касается вашего вопроса о том, как добавить JPanel в JApplet, снова учебники покажут вам, как это сделать.Если вы не связались с большим индексом учебника, вам нужно сделать это: Действительно большой индекс .

Очень простой пример выглядит так:

import java.lang.reflect.InvocationTargetException;
import javax.swing.*;

public class MyApplet extends JApplet {
   @Override
   public void init() {
      try {
         SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
               getContentPane().add(new MyJPanel());             
            }
         });
      } catch (InterruptedException e) {
         e.printStackTrace();
      } catch (InvocationTargetException e) {
         e.printStackTrace();
      }
   }
}
...