2012-02-18 3 views
2

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

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

+2

P.S. Это первый «реальный» графический интерфейс, который я делаю, учтите это :) – Squeazer

+0

Если вы хотите использовать элементы управления Swing, почему бы вам не использовать один из макетов сетки: GridLayout или GridBagLayout. Это не очень помогает в рисовании линий сетки. – cdc

+0

@HovercraftFullOfEels: :-), My Bad, сегодня действительно один такой день, когда я не должен отвечать людям, я никогда не думал о размножении. –

ответ

6

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

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

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

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

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(); 
     } 
    } 
} 
+0

Хороший совет; ['CellTest'] (http://stackoverflow.com/a/4151403/230513) может заинтересовать вас. – trashgod

+0

Спасибо за совет! Я сделаю все в JPanel. Но у меня всегда была проблема с вставкой JPanel в JApplet, она никогда не работала. Как вы это делаете правильно?Например, если у меня была JPanel с пользовательским рисунком и несколькими текстовыми полями, как я вставляю их в JApplet? – Squeazer

+0

@ Squeazer: см. Правки к моему ответу выше. –

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