В настоящее время я пытаюсь получить JFrame
, который содержит два компонента JPanel
- первый компонент JPanel
предназначен для хранения различных кнопок, которые пользователь может нажимать для взаимодействия с программой и рисования изображений на экране. , Второй, и именно здесь начинается проблема, содержит фактический Canvas
объект, к которому я пытаюсь обратиться.
Проблема, с которой я столкнулся, заключается в том, что вторая панель на самом деле не нарисована. Я пробовал множество других подходов и проверок, но все предполагает, что текущий код должен работать.
В качестве теста я просто пытаюсь нанести fillRect()
на панель рисования, но безрезультатно. Вот мой код:
// Создание компонентов и JFrame:
public static void createDisplay() {
JFrame f = new JFrame();//When JFrame flowlayout manager removed, the rectangle was drawn.
c = new Canvas();
width = 500;
height = 500;
f.setLayout(new FlowLayout());
f.add(addButtons()); //private method that covers the button panel
JPanel drawPanel = new JPanel();
drawPanel.add(c);
c.setFocusable(false);
f.add(drawPanel);
f.setPreferredSize(new Dimension(height, width));
lstnr = new Listeners();
f.addKeyListener(lstnr);
f.addMouseListener(lstnr);
f.addMouseMotionListener(lstnr);
f.setLocationRelativeTo(null);
f.pack();
f.setVisible(true);
}
И код, который выполняет фактическое рисование на экране:
private void render() {
bs = c.getBufferStrategy();
if(bs == null) {
c.createBufferStrategy(3);
return;
}
do {
do {
g = bs.getDrawGraphics();
l.setGraphicsObj(g);
g.clearRect(0, 0, width, height);
for(Symbols s : l.getSymbolsArray());
s.renderSymbols();
}
g.fillRect(0, 0, 50, 50); //Just to test & make sure it works
g.dispose();
}while(bs.contentsRestored());
bs.show();
}while(bs.contentsLost());
}
Теперь я хотел бы еще раз подчеркнуть, что прямоугольник был нарисован , когда я удалил фрагмент f.setLayoutManager(new FlowLayout());
из метода createDisplay()
. Любая помощь очень ценится.