gpt4 book ai didi

java - 重新绘制之前不会清除面板

转载 作者:行者123 更新时间:2023-12-01 17:31:32 25 4
gpt4 key购买 nike

我有一个 JPanel,其中画了一个三角形。当有人单击按钮时,应该使用新参数重新绘制三角形。问题是旧的三角形仍然存在,而新的三角形与下面的部分文本字段弄乱了。

public class Vermessung {   

private static void eingabe(){
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(screen.height/2, screen.height/4*3);
JPanel jp = new JPanel();
jp.setLayout(new BoxLayout(jp, BoxLayout.PAGE_AXIS));

//Eingabebereich
JPanel eingabebereich = new JPanel(new GridLayout(3, 1));
JPanel abc = new JPanel(new GridLayout(4, 2));
abc.add(new JLabel("Strecke"));
abc.add(new JLabel("Gemessener Wert in [m]"));
abc.add(new JLabel("a:"));
abc.add(tfa);
abc.add(new JLabel("b:"));
abc.add(tfb);
abc.add(new JLabel("c:"));
abc.add(tfc);

//AusgabeBereich
JPanel ausgabe = new JPanel(new GridLayout(2, 3));
ausgabe.add(new JLabel("p [m]"));
ausgabe.add(new JLabel("q [m]"));
ausgabe.add(new JLabel("h [m]"));
ausgabe.add(P);
ausgabe.add(Q);
ausgabe.add(H);
P.setEditable(false);
Q.setEditable(false);
H.setEditable(false);

//Buttons mit Listenern
JPanel buttons = new JPanel(new FlowLayout());
JButton ok = new JButton("OK");
JButton cancel = new JButton("beenden");

ActionListener al = new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {

//Textfelder auslesen
TextfelderAuslesen();

//bei gueltiger Eingabe Höhe Berechnen
if(berechenbar){
berechnungPQ();
berechnungH();
P.setText(String.valueOf(p));
Q.setText(String.valueOf(q));
H.setText(String.valueOf(h));
sketch.update(vec);
sketch.repaint();
}else{

}

}
};
ok.addActionListener(al);

ActionListener beenden = new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
System.exit(0);

}
};
cancel.addActionListener(beenden);

buttons.add(ok);
buttons.add(cancel);

//Fensteraufbau
sketch.setPreferredSize(new Dimension(screen.height/2, screen.height/2));
jp.add(sketch);
eingabebereich.add(abc);
eingabebereich.add(ausgabe);
eingabebereich.add(buttons);
eingabebereich.setPreferredSize(new Dimension(screen.height/4, screen.height/4));
jp.add(eingabebereich);
f.add(jp);
f.setVisible(true);
}


}

public class Zeichnung extends JPanel{

public void paint(Graphics g){
zeichneDreieck(g);
}

private void zeichneDreieck(Graphics g){
berechneLaengen();
g.setColor(new Color(255,0,0));
g.drawLine(30, 30, ca, 30);
g.drawString("c", ca/2, 20);
g.drawLine(ca, 30, qa, ha);
g.drawString("a", (ca-pa/2), ha/2);
g.drawLine(qa, ha, 30, 30);
g.drawString("b", (qa/2), ha/2);
g.setColor(new Color(0,0,0));
g.drawLine(qa, ha, qa, 30);
g.drawString("h", qa+5, ha/2);
}
}

最佳答案

public void paintComponent(Graphics g){
super.paintComponent(g);
zeichneDreieck(g);
}

对于JPanel,请重写paintComponent()。作为第一行,调用 super 方法。

关于java - 重新绘制之前不会清除面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416307/

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