按下按钮1会在方框2中放置一个方框,按下按钮2会放置另一个方框,但第一个方框会消失。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GuiDemo extends JPanel implements ActionListener {
JFrame pane1 = new JFrame("pane1");
JFrame pane2 = new JFrame("pane2");
public GuiDemo(){
pane1.setSize(400,400);
pane1.setLocation(100, 100);
pane2.setSize(400,400);
pane2.setLocation(800, 100);
pane1.setVisible(true);
pane2.setVisible(true);
pane1.setLayout(new FlowLayout());
JButton b1 = new JButton("Button 1");
JButton b2 = new JButton("Button 2");
pane1.add(b1);
pane1.add(b2);
b1.setVisible(true);
b1.addActionListener(this);
b2.setVisible(true);
b2.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
switch (e.getActionCommand()){
case "Button 1":{
placeCircle pc = new placeCircle(0);
pane2.add(pc);
pane2.setVisible(true);
break;}
case "Button 2":{
placeCircle pc = new placeCircle(1);
pane2.add(pc);
pane2.setVisible(true);
break;}
}
}
public static void main(String[] args) {
new GuiDemo();
}
}
a作为第1框和第2框之间的偏移传递。
class placeCircle extends JPanel{
int a;
public placeCircle(int a){
this.a = a;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.BLACK);
g.drawRect(20+a*100, 20, 20, 20);
}
}
但我的主要问题是,我应该使用painComponent吗?
答案 0 :(得分:2)
按下按钮1会在方框2中放置一个方框,按下按钮2会放置另一个方框,但第一个方框会消失。
JFrame的默认布局管理器是BorderLayout。您正在向BorderLayout的CENTER
添加组件,但一次只能显示一个组件,因此您只能看到最后一个组件。
我应该使用painComponent吗?
是的,但是您的所有绘画都需要在该组件的paintComponent()方法中的单个组件中完成。
所以基本上你需要保持一个要绘制的对象列表。然后paintComponent()方法遍历列表并绘制每个对象。
查看Custom Painting Approaches中的Draw On Component
示例。有关此方法的示例。