当前位置: 首页 > 知识库问答 >
问题:

JOptionPane保持JFrame上的重叠值

刁钧
2023-03-14

我是JFrame的新手,我想知道为什么我的JOptionPane不会停止弹出。当我连续输入JOptionPane时,在JFrame上的值与前面的值重叠,这使我的程序处于循环中,防止打印过程打开。我认为这是因为程序在一个公共void类中而不是在一个公共静态void主类中请求输入值,但我不知道如何将这些值放在一个JFrame上,否则,由于图形组件的原因。

import java.awt.*;
import java.awt.print.PageFormat;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

import javax.swing.*;
public class Assignment3 extends JFrame
{
Assignment3()
{
    setTitle("Amber's Skateboarders");
    setSize(1200,720);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void paint(Graphics g)
{   
    Font bigName = new Font("Ariel Bold", Font.BOLD, 20);
    Font company = new Font("Comic Sans", Font.BOLD, 12);
    Font myList = new Font("Comic Sans", Font.PLAIN, 12);

    g.setFont(bigName);
    g.drawString("Skateboarders", 15, 100);
    String companyName;
    String companyAddress;
    int itemIndex = 0;
    int pricesIndex = 0;
    int quantityIndex = 0;
    String[] merchandise = new String[1000];
    double[] prices = new double[1000];
    int[] quantity = new int[1000];
    int addMore;
    String[] options = {"Yes", "No"};
    double subtotal = 0;
    double[] result = new double[1000];
    String[] list = new String[1000];

    companyName = JOptionPane.showInputDialog(null, "What is your company name?");
    g.setFont(company);
    g.drawString(companyName, 15, 115);
    companyAddress = JOptionPane.showInputDialog(null, "What is your company's address?");
    g.setFont(company);
    g.drawString(companyAddress, 15, 130);

    do
    {
        merchandise[itemIndex] = JOptionPane.showInputDialog(null, "What is the name of the item you want?");
        prices[pricesIndex] = Double.parseDouble(JOptionPane.showInputDialog(null, "How much does this cost?"));
        quantity[quantityIndex] = Integer.parseInt(JOptionPane.showInputDialog(null, "How much of this item do you need?"));
        itemIndex++;
        pricesIndex++;
        quantityIndex++;
        addMore = JOptionPane.showOptionDialog(null, "Do you want to add more to your shopping cart?", "Before you go!", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null, options, options[0]);
    }
    while(addMore == 0);
    int k;
    g.setFont(myList);
    if (addMore == 1)
    {   
        for (int i = 0; i <= pricesIndex-1; i++)
        {
            result[i] = prices[i]*quantity[i];
        }
        for (double j : result)
        {
            subtotal += j;
        }       
        for (k = 0; k<pricesIndex; k++)
        {
            list[k] = String.valueOf(quantity[k])+"\u00D7"+merchandise[k];
            g.drawString(list[k], 15, k*15+145);
            g.drawString("$" +String.valueOf(result[k]), 120, k*15+145);
            //all += String.valueOf(quantity[k])+"\u00D7"+merchandise[k]+"\t\t\t"+String.valueOf(result[k])+"\n";
        }
        k=pricesIndex;
        double taxes = subtotal*0.2;
        g.setFont(company);
        g.drawString("Subtotal: ", 15, k*15+145);
        g.drawString("$"+String.valueOf(subtotal), 120, k*15+145);
        k++;
        g.drawString("Tax: ", 15, k*15+145);
        g.drawString("$"+String.valueOf(taxes), 120, k*15+145);
        k++;
        g.drawString("Total: $", 15, k*15+145);
        g.drawString("$"+String.valueOf(taxes+subtotal), 120, k*15+145);
}
public static void main(String[] args)
{
    Assignment3 main = new Assignment3();
    main.paint(null);
}
}

共有1个答案

田晨
2023-03-14

正如在AWT和Swing中的绘画:绘画方法中所讨论的,“Swing程序应该重写PaintComponent(),而不是重写Paint()。”在回调中引发一个不在您控制范围内的对话框也是非常不寻常的。由于您主要调用drawstring(),您可能会发现通过settext()简单地更新组件,如jlabeljtextfield更容易。如果要自动更新绘图区域,请使用如下所示的非模态对话框。

 类似资料:
  • 我已经折腾了一会儿,以使它以我打算的方式工作,但无法通过Google或API找到任何东西来找到我寻求的答案,所以我来了! 我目前正在开发的项目是一个士兵注册应用程序(项目主题),我使用了和s,但我需要在中获得一个对话框,以获取答案。这样工作的东西,但是集成在:

  • 问题内容: 我正在关注有关如何创建自定义对话框的Oracle教程:http : //docs.oracle.com/javase/tutorial/uiswing/components/dialog.html 我有两个按钮:“保存对象”和“删除对象”,单击它们应执行一段代码。不幸的是,我似乎无法向JOptionPane按钮添加任何ActionListener,因此单击它们时什么也没有发生。 谁能帮

  • 选择无状态滑动窗口操作的一些注意事项是什么(例如,通过updateStateByKey或新mapStateByKey)选择保持状态(例如通过updateStateByKey或新mapStateByKey)时,使用火花流处理连续的有限事件会话流? 例如,考虑以下场景: 一种可穿戴设备跟踪由穿戴者进行的体育锻炼。该装置自动检测何时开始锻炼,并发出信息;在锻炼过程中发出附加信息(如心率);最后,当练习完

  • 我在Java中做了一个小数字猜谜游戏。我的主JFrame(主菜单)有三个J按钮,播放,声音和退出。 按下play按钮开始我的游戏,一系列的JOptionPanes出现,要求用户输入数字。它工作正常,游戏运行正常。但是当我按play键玩游戏的时候,我不能按exit或者sound键或者游戏中的其他任何键。我甚至不能按JFrame主窗口的X(关闭)按钮,直到我完全玩完游戏,或者关闭JOptionPane

  • 问题内容: 我是Swing的新手,我遇到了一个状况。我正在设计一个基于xml文件input(meta- data)动态呈现GUI组件的应用程序。现在,我的大多数JTextField都将InputVerifier设置为它们,以进行验证。每当输入无效时,输入验证器都会弹出JOptionPane。 现在,如果用户输入无效数据并向前移动并单击面板上的按钮,则将弹出一个对话框,用户必须对此做出响应。但此后该

  • 我想像这里一样堆叠两个不同的XYChart。 然而,在本例中,轴的边界是相同的,数据是静态的。 在我的例子中,我有动态数据要绘制:新值在数据序列可用时添加到数据序列中。因此,当新数据到达时,y轴(例如)会更新。 此外,这两个数据集并不完全在同一范围内。 这是第一次尝试: 结果看起来像这样: Y轴看起来不太好:有两个轴,由于它们不再具有相同的边界,因此无法正确覆盖。 下一个尝试包括创建一个轴,并将其