gpt4 book ai didi

java - 如何防止 JFrame 中的形状在调整窗口大小后消失

转载 作者:行者123 更新时间:2023-11-30 05:23:57 25 4
gpt4 key购买 nike

public void actionPerformed(ActionEvent e)
{
try
{
//récupérer les coordonnées(x,y) du text area
int x=Integer.parseInt(f.x.getText());
int y=Integer.parseInt(f.y.getText());
int puissance=Integer.parseInt(f.p.getText());

f.APs.add(new AccessPoint (x,y,f.APs.size(),puissance));

String ch="Point d'accés "+String.valueOf(f.APs.size())+" Center xc = "+String.valueOf(x)+" yc= "+String.valueOf(x);
System.out.println(ch);
f.t.add(ch);

Graphics g ;
g= f.getGraphics();
paintComponent(g);
}
catch(Exception e1){System.out.println("Erreur");}
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
if(f.APs.size()!=0)
{
try {

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
int currPoint =f.APs.size()-1;
int puissance =f.APs.get(currPoint).p;
Color C= new Color(128,puissance,puissance,puissance);
Shape circle = new Ellipse2D.Float(f.APs.get(currPoint).x-(f.APs.get(currPoint).diametre/2),
f.APs.get(currPoint).y-(f.APs.get(currPoint).diametre/2),
f.APs.get(currPoint).diametre,f.APs.get(currPoint).diametre);
g2d.draw(circle);
g2d.setPaint(C);
g2d.fill(circle);

}catch(Exception e2){System.out.println("Erreur");}}
}

最佳答案

    g= f.getGraphics();
paintComponent(g);
  1. 不要使用 getGraphics()。使用这种方法完成的任何绘画都只是暂时的(正如您所注意到的)
  2. 不要直接调用paintComponent()。 Swing 将根据需要调用 PaintComponent(...) 方法并传入正确的 Graphics 对象。

绘画方法应该只进行绘画。它不应该改变组件的状态。

因此,如果您想动态添加要绘制的形状,您有两种方法:

  1. 保留要绘制的形状的 ArrayList。创建一个类似 addShape(..) 的方法来更新 ArrayLIst。然后你的绘画代码将遍历 ArrayList 来绘制每个形状。

  2. 直接绘制到 BufferedImage。然后绘制 BufferedImage。

这两种方法的工作示例可以在 Custom Painting Approaches 中找到。

关于java - 如何防止 JFrame 中的形状在调整窗口大小后消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59021437/

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