Добрый день. Возникла сложность с рисованием на панели, никак не могу понять, с какой стороны взяться за нее.
Есть панель, на которой установлен фоновый рисунок. Необходимо на этой же панели (или на панели поверх нее) отрисовать эллипсы, так, чтобы они отображались поверх фонового рисунка. Эллипсы должны рисоваться по нажатию кнопки. Можно ли это как-то сделать?
Добавлено через 3 часа 50 минут
Попробовал сделать так:
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
| import java.awt.*;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class JavaApplication2 extends JFrame{
JPanel All=new JPanel(); //Общая панель
ImagePanel cp=new ImagePanel(new ImageIcon("folder.jpg").getImage());
JPanel UserEnter=new JPanel();//Панель выбора
JButton Game=new JButton("Start" );
GridLayout gr1=new GridLayout(1,2);
SimpleComponent ooo=new SimpleComponent();
JavaApplication2(){
cp.setLayout(new BorderLayout());
All.setLayout(gr1);
All.add(cp);
All.add(UserEnter);
UserEnter.add(Game);
setSize(600, 420);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(All);
setVisible(true);
cp.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5),
BorderFactory.createLineBorder(Color.black)));
cp.add(ooo, BorderLayout.CENTER);
Game.addActionListener(new GameButtonActionListener() );
}
private class GameButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent ae) {
}
}
private class ImagePanel extends JPanel {
private Image img;
public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
public ImagePanel(Image img) {
//setLayout(null);
this.img = img;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, null);
}
}
public static void main(String[] args) {
JavaApplication2 h=new JavaApplication2();
}
} |
|
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class SimpleComponent extends JPanel{
public SimpleComponent() {
setOpaque(false);
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.RED);
g.drawOval(20, 20, 20, 20);
}
} |
|
Но тут получается, что объект SimpleComponent() содается при создании формы, мне надо по кнопке.
Попробовал переопределить метод:
Java |
1
2
3
4
5
6
7
8
9
| private class GameButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent ae) {
SimpleComponent ooo=new SimpleComponent();
cp.add(ooo, BorderLayout.CENTER);
}
} |
|
Но тогда эллипс не отрисовывается вообще
Добавлено через 20 часов 11 минут
Разобрался, можно закрывать