我是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);
}
}
正如在AWT和Swing中的绘画:绘画方法中所讨论的,“Swing程序应该重写PaintComponent()
,而不是重写Paint()
。”在回调中引发一个不在您控制范围内的对话框也是非常不寻常的。由于您主要调用drawstring()
,您可能会发现通过settext()
简单地更新组件,如jlabel
和jtextfield
更容易。如果要自动更新绘图区域,请使用如下所示的非模态对话框。
我已经折腾了一会儿,以使它以我打算的方式工作,但无法通过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轴看起来不太好:有两个轴,由于它们不再具有相同的边界,因此无法正确覆盖。 下一个尝试包括创建一个轴,并将其