Цель состоит в том, чтобы отобразить таблицу ячеек, где все клетки являются независимыми друг от друга, и каждая ячейка имеет несколько дополнительных дисплеев (представьте себе доску Kakuro, Jeopardy доска, внутр.)Схема сетки, содержащая макеты карт - это можно сделать?
Это моя первая попытка на качелях , После большого чтения я решил, что мой подход будет заключаться в том, чтобы сначала спроектировать каждую ячейку независимо друг от друга с помощью макета карты (эта часть, которую я доволен), а затем «обернуть» ее в макет сетки. Это, вероятно, где мое отсутствие понимания в основном свинге поднимает голова:
При проектировании каждой ячейки я создаю рамку и добавить панель к нему:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Cell extends Component{
JFrame frame = new JFrame();
/* we'll use a card layout with a panel for each look of the cell */
CardLayout cardLayout = new CardLayout();
JPanel containterPanel = new JPanel();
JPanel firstPanel = new JPanel();
JPanel secondPanel = new JPanel();
JPanel thridpanel = new JPanel();
public Cell(){
/* assign the card layout to the container panel */
containterPanel.setLayout(cardLayout);
/* assign objects to the different panels - details not important for the sake of the question */
//....
/* add the different panels to the container panel and show the initial one */
containterPanel.add(firstPanel, "firstPanel");
containterPanel.add(secondPanel, "secondPanel");
containterPanel.add(thridpanel, "thridpanel");
cardLayout.show(containterPanel, "firstPanel");
/* add the container to the frame and display it*/
frame.add(containterPanel);
frame.setVisible(true);
}
}
Это ведет себя хорошо. Но моя попытка обернуть его в макете сетки, где каждая ячейка ведет себя как это очень неуклюж:
import java.awt.*;
public class Board{
private static final int COLUMNS_NUM = 3;
private static final int ROWS_NUM = 3;
JFrame frame = new JFrame();
JPanel panel = new JPanel();
Cell cells[] = new Cell[COLUMNS_NUM * ROWS_NUM];
public Board(){
panel.setLayout(new GridLayout(ROWS_NUM, COLUMNS_NUM));
for (int i = 0; i <ROWS_NUM * COLUMNS_NUM; i++)
{
cells[i] = new Cell();
panel.add(cells[i]);
}
frame.add(panel);
frame.setVisible(true);
}
public static void main(String[] args) {
new Board();
}
}
Что я получаю кучу несвязанных кадров, отделенную от основного каркаса платы. Я не правильно обрабатываю фреймы (должен ли я создать только один ...?). Любая помощь в руководстве меня к правильному подходу будет оценена по достоинству.
1) * "макет сетки макеты, содержащие карты - может это быть готовым? »* Да. 2) Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –
Спасибо @AndrewThompson, относительно новое здесь - я сделал небольшие изменения, я считаю, что теперь он требует требования «Минимальное, полное и проверяемое». Пожалуйста, дайте мне знать, если это не так. – yonikes
Если ячейки должны быть добавлены в Board, сделайте их JPanel, а не JFrame – c0der