gpt4 book ai didi

java - 为什么当我调用 repaint() 时我的 JPanel 没有改变?

转载 作者:行者123 更新时间:2023-12-02 15:48:49 24 4
gpt4 key购买 nike

我有以下代码需要帮助...

public class Nodes extends JPanel implements ActionListener, MouseListener, MouseMotionListener {

private static JPanel p1;
private static JPanel p2;
private JButton linkButton, nodeButton;
private Vector nodeVector, linkVector;
private Vector<Integer> data;
private String s1,s2;
public int x;
int pt1;
public int pt2;
private Rectangle Node;
private boolean f1, f2 = false;

Nodes () {
JFrame F = new JFrame ("Add Node / Add Link");
nodeVector = new Vector ();
linkVector = new Vector ();
data = new Vector <Integer> ();
F.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
F.setVisible (true);
F.setSize (500, 500);
p1 = new JPanel ();
p2 = new JPanel ();
linkButton = new JButton ("Add Link");
nodeButton = new JButton ("Add Node");
linkButton.addActionListener (this);
nodeButton.addActionListener (this);
p2.addMouseListener (this);
p2.addMouseMotionListener (this);
p1.add (linkButton);
p1.add (nodeButton);
F.add (p1,BorderLayout.SOUTH);
F.add (p2,BorderLayout.CENTER);
p2.setBackground (Color.WHITE);
}

public void paintComponent (Graphics g) {
super.paintComponent (g);
Graphics2D g2d = (Graphics2D)(g);
BufferedImage buffImage = new BufferedImage (25,25,BufferedImage.TYPE_INT_RGB);
Graphics2D gg = buffImage.createGraphics ();
gg.setColor (Color.GRAY);
gg.fillRect (0, 0, 25, 25);
gg.setStroke (new BasicStroke (12.0f));
gg.setColor (Color.BLUE);
gg.drawString ("" + data, 10, 10);
g2d.setPaint (new TexturePaint (buffImage, new Rectangle (25,25)));
g.drawRect (pt1, pt2, 10, 10);
repaint ();
}

public void actionPerformed(ActionEvent e){
if(e.getSource()==linkButton){
s1 = JOptionPane.showInputDialog (null, "Insert the first Node Number");
s2 = JOptionPane.showInputDialog (null, "Insert the second Node Number");
}
if (e.getSource () == nodeButton){
x = Integer.parseInt ((JOptionPane.showInputDialog (null, "Insert the Node Number")));
for (int i = 0 ; i < data.size (); i++){
if (x == (int) data.get (i))
x = Integer.parseInt (JOptionPane.showInputDialog (null, "Used before insert another number"));
}
data.add (x);
f1 = true;
}
}

public void mouseClicked (MouseEvent e){
f2 = true;
if (f1){
JOptionPane.showMessageDialog (null, "you clicked at" + e.getPoint ());
pt1 = e.getX ();
pt2 = e.getY ();
f1 = !f1;
repaint ();
}
}

public static void main (String[] args) {
new Nodes();
}
}

我尝试通过调用 repaint() 来更新显示,但是 paintComponent() 方法不起作用,并且实际上没有任何变化。在正确的行为中,当我按下“添加节点”按钮然后单击面板上的任意位置时,应绘制一个带有用户输入的数字的矩形。

有人可以帮忙解释一下我的代码有什么问题吗?

最佳答案

您的主类是 JPanel,但它没有添加到 JFrame 及其面板/按钮/诸如此类的内容中。

尝试这样:

private Vector<Integer> data;
public int x;
int pt1;
public int pt2;
private Rectangle Node;
private boolean f1, f2 = false;
private JButton linkButton, nodeButton;

Nodes ()
{
JFrame F = new JFrame ("Add Node / Add Link");
Vector nodeVector, linkVector;
nodeVector = new Vector ();
linkVector = new Vector ();
data = new Vector <Integer> ();
F.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
F.setVisible (true);
F.setSize (500, 500);

JPanel p1 = new JPanel ();
linkButton = new JButton ("Add Link");
nodeButton = new JButton ("Add Node");
linkButton.addActionListener (this);
nodeButton.addActionListener (this);
addMouseListener (this);
addMouseMotionListener (this);
p1.add (linkButton);
p1.add (nodeButton);
F.add (p1, BorderLayout.SOUTH);
F.add (this, BorderLayout.CENTER);
setBackground (Color.WHITE);
}

许多属性可以是局部变量。 JPanel p2 被删除并被 this 的 JPanel 取代,它允许使用 PaintComponent 方法。

关于java - 为什么当我调用 repaint() 时我的 JPanel 没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10152178/

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