gpt4 book ai didi

java - 我正在尝试将多个paintComponents 放置在JFrame 中。

转载 作者:行者123 更新时间:2023-12-02 03:56:15 25 4
gpt4 key购买 nike

按按钮 1 会在 Pane 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 吗?

最佳答案

Pressing Button 1 puts a box in pane2, pressing Button 2 puts another box up, but the 1st one disappears.

JFrame 的默认布局管理器是 BorderLayout。您正在将组件添加到 BorderLayout 的 CENTER 中,但一次只能显示一个组件,因此您只能看到最后一个组件。

should I be using painComponent?

是的,但是所有绘画都需要在单个组件中通过该组件的 PaintComponent() 方法完成。

所以基本上你需要保留一个要绘制的对象列表。然后,paintComponent() 方法遍历列表并绘制每个对象。

查看 Custom Painting Approaches 中的 Draw On Component 示例。有关此方法的示例。

关于java - 我正在尝试将多个paintComponents 放置在JFrame 中。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35421868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com