Я пытаюсь сделать небольшой графический интерфейс, используя свинг.Я хотел бы нарисовать многоугольник на JPanel, который имеет GridBagLayout.Как мне это сделать?Могу ли я указать координаты многоугольника для рисования?Координаты основаны на ячейке, в которой нарисован многоугольник, или на JPanel, или на фрейме?
Изначально для проверки я просто попытался нарисовать линию с координатами в моем классе, а затем добавитьэто к JPanel.Ничего не рисуется.
Переопределенный метод paintComponent, который у меня есть в классе UniverseDisplay:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.black);
g.drawLine(20, 20, 30, 30);
System.out.println("PAINTED");
}
У меня есть функция, которая устанавливает UniverseDisplay и которая вызывает paintComponent, следующим образом:
public void setUpGenerateButton(){
generateButton = new JButton("Generate Model");
generateButton.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Universe u = new Universe(reflexive, transitive, symmetric, hereditary);
World w = new World(u);
u.addWorld(w);
Tree t = new Tree();
t.setRoot(t);
t.setData(expressions, 0, expressions.size());
t.setInitialWorlds(w);
t.setInitialUniverses(u);
t.evaluateModalExpressionV2(u);
/*
* this bit below isnt actually painting anything on the
* JPanel even though paintComponent() is being called properly
*/
UniverseDisplay ud = new UniverseDisplay(u);
rightPanel.add(ud);
rightPanel.revalidate();
rightPanel.repaint();
}
});
}
JPanel установлен
public void setUpPanels() {
setUpTextInputField();
setUpGenerateButton();
setUpPropsPanel();
setUpButtons();
setUpClearButton();
leftPanel = new JPanel();
rightPanel = new JPanel();
leftPanel.setLayout(new GridBagLayout());
rightPanel.setLayout(new GridBagLayout());
leftPanel.setBackground(Color.gray);
rightPanel.setBackground(Color.white);
/*
* create a new constraints for each new component, to avoid bugs
*/
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
leftPanel.add(inputL, constraints);
constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 1;
leftPanel.add(inputField, constraints);
constraints = new GridBagConstraints();
constraints.gridx = 1;
constraints.gridy = 1;
constraints.insets = new Insets(0, 15, 0, 0);
leftPanel.add(generateButton, constraints);
constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 2;
leftPanel.add(propsL, constraints);
constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 3;
constraints.insets = new Insets(10, 0, 0, 0);
constraints.fill = GridBagConstraints.BOTH;
constraints.anchor = GridBagConstraints.WEST;
leftPanel.add(propsPanel, constraints);
constraints = new GridBagConstraints();
constraints.gridx = 1;
constraints.gridy = 3;
constraints.ipadx = 30;
constraints.ipady = 70;
constraints.anchor = GridBagConstraints.WEST;
constraints.insets = new Insets(10, 15, 0, 0);
leftPanel.add(buttonPanel, constraints);
constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 4;
constraints.insets = new Insets(10, 0, 0, 0);
constraints.anchor = GridBagConstraints.WEST;
leftPanel.add(clearButton, constraints);
add(leftPanel);
add(rightPanel);
}
Почему эта линия не рисуется в JPanel?Как мне начать рисовать фигуры в JPanel, для которого макет не имеет нулевого значения?
Надеюсь, этого достаточно для полезного ответа:)