有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing Java JFrame问题与对话框

当我运行程序时,我遇到了JFrame Buffer的一些问题,我不知道到底是什么问题。当我运行程序时,它会在缓冲区的左上角显示一些对话框部分

以下是我的程序的输出:

http://i.stack.imgur.com/SpVSD.jpg

下面是代码

谢谢

import java.awt.*;
import java.util.*;
import javax.swing.*;

public class Main extends JPanel 
{
    public void paintComponent(Graphics g) 
    {
        super.paintComponent(g);
        int[] x1 = new int[10];
        int[] y1 = new int[10];
        int i,n;
        Polygon p=new Polygon();
        n = Integer.parseInt(JOptionPane.showInputDialog("Enter no. of co-ordinates of polygon: "));
        System.out.println(" no. of co-ordinates of polygon are :"+n);

        for(i=0;i<n;i++) 
        {  
            x1[i] = Integer.parseInt(JOptionPane.showInputDialog("Enter x co-ordinates of polygon: "));
            y1[i] = Integer.parseInt(JOptionPane.showInputDialog("Enter y co-ordinates of polygon: "));
        }
        for(i=0;i<n-1;i++)
        {
            g.drawLine(x1[i],y1[i],x1[i+1],y1[i+1]);
        }
        g.drawLine(x1[n-1],y1[n-1],x1[0],y1[0]);
    }

    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        frame.setTitle("Polygon");
        frame.setSize(500,500);
        Container contentPane = frame.getContentPane();
        contentPane.add(new Main());
        frame.setVisible(true);
    }
}

共 (2) 个答案

  1. # 1 楼答案

    从不显示绘画方法中的JOptionPane。绘制方法仅用于绘制,不用于获取用户输入

    相反,您需要执行以下操作:

    1. JOptionPane应该从主方法中显示,以收集x/y参数

    2. 修改Main()类,使其具有类似addPoint(int x, int y)的方法

    3. 然后,上述方法将x/y值保存到类中的ArrayList对象。我会将点对象存储在此列表中

    4. 然后,绘制方法将遍历列表,然后绘制每一行

  2. # 2 楼答案

    油漆组件(…)每当“某物”(AWT EDT线程)认为组件需要重新绘制时,就会调用该方法。这个方法经常被调用,而且经常是在你没想到它会被调用的时候。所以,不要在该方法的主体中显示JOptionPane

    • 所以,正如camickr所说,最好只从主方法调用