gpt4 book ai didi

java - JPanel 中 paintComponent 期间的 JOptionPane 输入对话框

转载 作者:行者123 更新时间:2023-11-30 09:16:09 24 4
gpt4 key购买 nike

我在 Netbeans 中使用 Java 绘制加权二叉树。在 mouseClick 事件上,绘制了一个节点,在 Pane 的不同点按下并释放鼠标会创建一条边,之后我需要立即弹出一个输入对话框并要求用户输入边的权重。这是我的代码。不过,不要费心浏览整个代码。

public class panel1 extends JPanel implements MouseListener,ActionListener
{

nodeClass[] nodes = new nodeClass[20];
int nodeRadius = 10;
int ctr = 0;
int[] x=new int[100];
int[] y=new int[100];
int[] oldx=new int[100];
int[] oldy=new int[100];
int[] newx=new int[100];
int[] newy=new int[100];
int edges=0;
int[] edgeWeight = new int[100];
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.GREEN);
if(x[ctr]!=0&&y[ctr]!=0)
{
for(int i=0;i<=ctr;i++){
g.setColor(Color.GREEN);
g.fillOval(x[i]-25, y[i]-45, 40, 40);
g.setColor(Color.BLACK);
g.drawString(String.valueOf(i+1),x[i]-10,y[i]-25);

}
for(int i=0;i<edges;i++){
g.setColor(Color.GREEN);
g.drawLine(oldx[i]-10,oldy[i]-30,newx[i]-10,newy[i]-30);
g.drawString(String.valueOf(edgeWeight[i]), (oldx[i]+newx[i])/2, (oldy[i]+newy[i])/2);
}
ctr++;
}
if(oldx[edges]!=0&&oldy[edges]!=0&&newx[edges]!=0&&newy[edges]!=0&&(newx[edges]!=oldx[edges] && newy[edges]!=oldy[edges]))
{
edgeWeight[edges] = Integer.ParseInt(JOptionPane.showInputDialog("Enter Weight Of Edge : "));
for(int i=0;i<ctr;i++){
g.setColor(Color.GREEN);
g.fillOval(x[i]-25, y[i]-45, 40, 40);
g.setColor(Color.BLACK);
g.drawString(String.valueOf(i+1),x[i]-10,y[i]-25);
}
for(int i=0;i<=edges;i++){
g.setColor(Color.GREEN);
g.drawLine(oldx[i]-10,oldy[i]-30,newx[i]-10,newy[i]-30);
g.drawString(String.valueOf(edgeWeight[i]), (oldx[i]+newx[i])/2, (oldy[i]+newy[i])/2);
}
edges++;
}
}

@Override
public void mouseClicked(MouseEvent me) {
x[ctr]=me.getX();
y[ctr]=me.getY();
repaint();
}

@Override
public void mousePressed(MouseEvent me) {
oldx[edges]=me.getX();
oldy[edges]=me.getY();
}

@Override
public void mouseReleased(MouseEvent me) {
newx[edges]=me.getX();
newy[edges]=me.getY();
repaint();
}

@Override
public void mouseEntered(MouseEvent me) {;
}

@Override
public void mouseExited(MouseEvent me) {;
}

@Override
public void actionPerformed(ActionEvent ae) {
String str=ae.getActionCommand();
System.out.println(str);
}
}

出现的问题是,每次我单击或拖动时,都会弹出无数个 JOptionPane 输入对话框,我别无选择,只能终止程序。

我没有将那段代码放在任何循环中。但也许是因为它在 paintComponent 方法中。有什么办法可以根除这个问题?或者我可以使用其他方式让用户输入边的权重吗?

最佳答案

The problem arises that, every time i click or drag, an infinite number of JOptionPane input dialogues pop open

不要在 paintComponent() 方法中显示 JOptionPane 对话框。绘画方法仅供绘画。

选项 Pane 应根据您的具体要求显示在您的 mousePressed 或 mouseReleased 代码上。

关于java - JPanel 中 paintComponent 期间的 JOptionPane 输入对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19524598/

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