Я хочу, чтобы в моем приложении было 2 JPanels. Один, который будет иметь некоторую информацию о моей пользовательской доске справа, а другой - о рисовании этой пользовательской доски слева. Первый JPanel - это классика, а второй - пользовательская панель. Кажется, у меня проблемы с размещением моей пользовательской панели в рамке.
Я создал класс BoardPanel в своем классе графического интерфейса для рисования моей пользовательской доски. Я не знаю, если это лучший подход. Должен ли я создать отдельный класс вместо этого?
Это код класса GUI:
public class BattleshipGUI extends JFrame {
private BoardPanel mainPanel;
///////////////////////////////////////////////////////////////////////////////////////////////
// Create my frame
///////////////////////////////////////////////////////////////////////////////////////////////
public BattleshipGUI() {
JPanel container = new JPanel(new BorderLayout()); //the container panel that contains the 2 other panels
mainPanel = new BoardPanel(); //main panel with my custom painting
JPanel detailsPanel = new JPanel(new BorderLayout()); //secondary panel with various details about the game
container.add(mainPanel, BorderLayout.CENTER); //add the 2 panels in the container
container.add(detailsPanel, BorderLayout.EAST);
this.add(container); //add container to my frame
//this.setContentPane(container);
this.setIconImage(Toolkit.getDefaultToolkit().getImage(BattleshipGUI.class.getResource("/resources/battleship_128.png")));
this.setTitle("My Battleship Game");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//this.setBounds(100, 100, 850, 700);
//this.pack();
this.setSize(850, 600);
this.setVisible(true);
}
А это код внутреннего класса для пользовательской картины
class BoardPanel extends JPanel {
private static final int ROWS = 20;
private static final int COLUMNS = 20;
public void paintComponent(Graphics g) {
super.paintComponent(g);
int sqSize = this.getHeight()/ROWS;
for(int i=0; i<ROWS; i++) {
for(int j=0; j<COLUMNS; j++) {
int x = j * sqSize;
int y = i * sqSize;
g.drawRect(x, y, sqSize, sqSize);
}
}
}
}
Помимо всего этого у меня есть вопрос. Если я хочу иметь собственную картину, можно ли работать вместе с WindowsBuilderPro? Сначала я начал использовать этот инструмент. Но я увидел, что не могу нарисовать что-то нестандартное с помощью инструмента, и мне пришлось написать код, чтобы сделать это. Можно ли написать код для пользовательской краски и одновременно использовать инструмент для разных целей, например, для добавления простой текстовой метки или даже для редактирования этой краски для рисования? Ожидаемый результат, который я хочу увидеть, появляется при запуске программы. Моя рамка с двумя панелями. Но когда я открываю WindowsBuilderPro, моя пользовательская панель не появляется, и результат немного неправильный. Это причина, по которой у меня возникает вопрос о моем подходе, и если я могу писать код и использовать инструмент одновременно. Спасибо и простите за длинный текст, ребята. Я слишком запутался в этом.