- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:我无法获取要更新的 JTextFields 或 rollResultTotal 的值。即使 JTextField 中的数据有效,仍然会引发 NumberFormatException。
问题:为什么变量不保留?这是由于类本身的声明造成的吗?是否可以更新 JLabel 面板以显示更新的结果? (尝试过这个,史诗般的失败)
提前感谢您提供任何意见和示例。
/*
ITP-120: Final Project
Programmer: S. Schnoor
Date: November 7th, 2009
Filename: SchnoorProject.java
Purpose: To generate "dice rolls" - a tally of random values as defined by the user,
including a final calculation modifier.
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.lang.*;
import java.math.*;
public class SchnoorProject extends JFrame implements ActionListener, EventListener
{
// Declare Class Variables
int sidesToRoll, diceToRoll, diceLeft, modifier, rollResult, rollResultTotal;
String getSides, getDice, getModifier;
JTextField inputSides = new JTextField();
JTextField inputDice = new JTextField();
JTextField inputModifier = new JTextField();
Random roll;
// Panels and Buttons
JPanel rollPanel;
JButton newRollButton, helpButton, exitButton;
// Create Colors
Color darkPurple = new Color ( 80, 0, 80);
Color darkGold = new Color (255, 215, 0);
Color darkCoal = new Color ( 24, 24, 24);
Color crimson = new Color (127, 12, 12);
Color ltSilver = new Color (140, 140, 180);
public static void main(String args[])
{
JFrame frame = new SchnoorProject();
WindowListener l = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
};
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
}
public SchnoorProject()
{
// Construction of Components
rollPanel = new JPanel();
getContentPane().add(rollPanel);
JLabel sidesLabel = new JLabel ("Enter the number of sides on each die below. (1 to 99)");
sidesLabel.setForeground(darkGold);
sidesLabel.setHorizontalAlignment(sidesLabel.CENTER);
JTextField inputSides = new JTextField("6");
inputSides.setBackground(darkCoal);
inputSides.setForeground(darkGold);
inputSides.setHorizontalAlignment(inputSides.CENTER);
JLabel diceLabel = new JLabel ("Enter the number of dice to roll below. (1 to 99)");
diceLabel.setForeground(darkGold);
diceLabel.setHorizontalAlignment(diceLabel.CENTER);
JTextField inputDice = new JTextField("3");
inputDice.setBackground(darkCoal);
inputDice.setForeground(darkGold);
inputDice.setHorizontalAlignment(inputDice.CENTER);
JLabel modifierLabel = new JLabel ("Enter the final modifier below. (-99 to 99)");
modifierLabel.setForeground(darkGold);
modifierLabel.setHorizontalAlignment(modifierLabel.CENTER);
JTextField inputModifier = new JTextField("2");
inputModifier.setBackground(darkCoal);
inputModifier.setForeground(darkGold);
inputModifier.setHorizontalAlignment(inputModifier.CENTER);
JButton newRollButton = new JButton("ROLL");
newRollButton.setBackground(darkCoal);
newRollButton.setForeground(darkGold);
newRollButton.addActionListener(this);
JButton helpButton = new JButton("Help/About");
helpButton.setBackground(darkCoal);
helpButton.setForeground(ltSilver);
helpButton.addActionListener(this);
JButton exitButton = new JButton("Exit");
exitButton.setBackground(darkCoal);
exitButton.setForeground(crimson);
exitButton.addActionListener(this);
//Conversions
getSides = inputSides.getText();
getDice = inputDice.getText();
getModifier = inputModifier.getText();
sidesToRoll = Integer.parseInt(getSides);
diceToRoll = Integer.parseInt(getDice);
modifier = Integer.parseInt(getModifier);
diceLeft = diceToRoll;
//rollResultTotal = rollResultTotal;
// Paneling
rollPanel.setLayout(new GridLayout (3,3));
rollPanel.setBackground(darkPurple);
rollPanel.setForeground(darkGold);
rollPanel.add(sidesLabel);
rollPanel.add(diceLabel);
rollPanel.add(modifierLabel);
rollPanel.add(inputSides);
rollPanel.add(inputDice);
rollPanel.add(inputModifier);
rollPanel.add(newRollButton);
rollPanel.add(helpButton);
rollPanel.add(exitButton);
}
// Implement ActionListener for multiple JButtons
public void actionPerformed(ActionEvent e)
{
String arg = e.getActionCommand();
if ("Help/About".equals(arg))
{
JOptionPane.showMessageDialog(null,"This application generates random values, based on the parameters input by the user.\nPlease choose number of dice, sides on each die, and a +/- roll modifier.\nIf no roll modifier is needed, enter 0 (numeric zero) in the modifier field.\n(The starting numbers tell the program to roll 3 six-sided dice and add 2 or '3d6+2'.)","Help/About",JOptionPane.INFORMATION_MESSAGE);
}
if ("Exit".equals(arg))
{
System.exit(0);
}
if ("ROLL".equals(arg))
{
try
{
while (diceLeft>0)
{
getSides = inputSides.getText();
sidesToRoll = Integer.parseInt(getSides);
if(sidesToRoll<1 || sidesToRoll>99) throw new NumberFormatException();
else
getDice = inputDice.getText();
diceToRoll = Integer.parseInt(getDice);
if(diceToRoll<1 || diceToRoll>99) throw new NumberFormatException();
else
getModifier = inputModifier.getText();
modifier = Integer.parseInt(getModifier);
if(modifier<-99 || modifier>99) throw new NumberFormatException();
else
rollResult = roll.nextInt(sidesToRoll)+1;
rollResultTotal = rollResultTotal + rollResult;
diceLeft--;
}
}
catch(NumberFormatException ex)
{
JOptionPane.showMessageDialog(null,"You must enter an integer within the given range of each field.","ROLL",JOptionPane.INFORMATION_MESSAGE);
diceLeft = 0;
}
{ //Display the Roll Formula and Result
JOptionPane.showMessageDialog(null,"You entered a roll of " + (diceToRoll) + "d" + (sidesToRoll) + "+(" + (modifier) + ").\nYou rolled " + (rollResultTotal) + "!");
}
;}
;}
}
最佳答案
您初始化了此成员变量,但从未将此字段添加到 UI:
JTextField inputSides = new JTextField(" ");
您在此文本字段中读取的内容仍然包含字符串 ""
,它不是整数。
getSides = inputSides.getText();
sidesToRoll = Integer.parseInt(getSides);
当您在构造函数中构建 UI 时,您可以声明另一个同名的局部变量,指向一个新对象:
JTextField inputSides = new JTextField("6");
这是出现在 UI 中的对象。局部变量inputSides
隐藏了同名的成员变量。
顺便说一句,这不是比较字符串的正确方法:
arg == "ROLL"
这只有效,因为arg
指向同一个内部对象实例。比较这些值的正确方法是:
"ROLL".equals(arg)
<小时/>
编辑:
您缺少的技巧是考虑您正在创建的对象以及您的引用变量指向哪些对象。
考虑一下代码的简化版本:
public class ObjectReferences {
private final JLabel label = new JLabel("I am FOO"); // label 1
public ObjectReferences() {
JLabel label = new JLabel("I am BAR"); // label 2
JButton button = new JButton("Click me");
button.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
onclick();
}
});
// will display "I am BAR"
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
frame.setLayout(new FlowLayout());
frame.add(label); // label 2
frame.add(button);
frame.setVisible(true);
}
public void onclick() {
// will display "I am FOO"
JOptionPane.showMessageDialog(null, label.getText()); // label 1
}
public static void main(String[] args) {
new ObjectReferences();
}
}
创建了两个标签对象,但只将一个添加到框架中。 标签 1 由成员变量引用,这是 onclick()
方法可见的标签。在构造函数中,label 2 由名为 label
的局部变量引用,该变量隐藏名为 label
的成员变量。
你的意图是写这样的东西:
public class ObjectReferences {
private final JLabel label = new JLabel("I am FOO");
public ObjectReferences() {
JButton button = new JButton("Click me");
button.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
onclick();
}
});
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
frame.setLayout(new FlowLayout());
frame.add(label);
frame.add(button);
frame.setVisible(true);
}
public void onclick() {
JOptionPane.showMessageDialog(null, label.getText());
}
public static void main(String[] args) {
new ObjectReferences();
}
}
关于Java:滚轮程序 - 调试 - 无论有效信息如何,变量都不会从 JTextField 更新并抛出 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1899648/
03-25 05:52:15.329 8029-8042/com.mgh.radio W/MediaPlayerNative: info/warning (703, 0) 03-25 05:52:15
我一直在 Internet 上到处寻找关于 FrameworkElementFactory 类的适当文档,但我似乎找不到有关它的适当教程或有用信息。 请问对这个问题了解更多的人可以给我更多的信息吗?这
我需要知道一个线程在进入等待状态之前如何将其ID发送到另一个线程。我想传递一个带有其ID的变量,但我不知道该怎么做。 最佳答案 如果只有一个线程及其父线程,则可以使用全局变量,因为它们在所有线程之间共
我正在尝试制作一个程序,该程序可以读取命令行上的所有单词,然后将其打印在新行上,而我想要做的是这样的: Some text: hello 但是相反,我得到了这样的东西: Some text: Hell
我有一个连接到rabbitmq服务器的python程序。当该程序启动时,它连接良好。但是当rabbitmq服务器重新启动时,我的程序无法重新连接到它,并留下错误“Socket已关闭”(由kombu产生
我正在设置CI / CD管道。部署步骤运行以下命令: kubectl apply -f manifest.yml --namespace kubectl rollout status Deploym
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
这是我在文件上运行 svn info 时输出的一部分: Last Changed Author: [user] Last Changed Rev: 269612 Last Changed Date:
所以我正在构建这个音乐应用程序,到目前为止它只扫描 SD 卡内的特定文件夹。这将返回路径,然后播放它们。 几个小时前我得知android系统中有一个媒体文件数据库所以 我想知道这个媒体文件数据库是否存
我正在绘制树形图,并且想知道如何绘制树类的相对百分比,即 A组=100 B地=30 C地=50 D 地 =20 然后,在图中,应该添加: A 组“50%” B 组“15%” 等在其“Group X”标
我正在构建一个社交网站,我想知道如何在用户首次登录时显示交互式教程和信息。比如只有在第一次登录时,用户才会被要求在他们的个人资料中填写更多信息。我怎样才能通过 php 和 mysql 实现这一点?例子
我是 java servlet 的新手。我研究了一些关于 servlet 的代码,但我真的很想知道更多基本的东西以及它是如何工作的。我只是想知道什么类型的 Material /内容可以从 java s
我想知道是否有办法为 user_id、sender_user_id 和 recipient_user_id 提供 name 信息来自 this fiddle 中的模式. 我现在唯一能想到的办法就是做这
这是我存储2个大学生信息的源代码。我想从输入中获取每个人的姓名、姓氏、ID 和 5 分,然后在输出中显示它们。我在输出中显示分数时遇到问题。 请帮忙 #include using namespace
假设我有一张带有条形图的图像,如下所示: 我想提取条形图和标签的值,除了训练 ML 模型之外,还有其他方法吗? 我有一堆图像,我为其生成了图表和一些描述。我目前正尝试仅从我能够做到的描述中提取信息,但
有没有办法从 GKTurnBasedParticipant 对象中检索玩家的名字?似乎除了根据类引用的难看的 playerID 之外,没有办法显示有关游戏玩家的相关信息。还是我遗漏了什么? 谢谢...
我有一个随机抛出“KeyNotFoundException”的 C# Silverlight 应用程序。我不知道找不到什么 key 。这让我想到了两个问题: KeyNotFoundException
本文实例为大家分享了ios获取本地音频文件的具体代码,供大家参考,具体内容如下 获取本地音频文件地址: ?
下面为大家介绍利用SQL查询语句获取Mysql数据库中表的表名,表描述、字段ID、字段名、数据类型、长度、精度、是否可以为null、默认值、是否自增、是否是主键、列描述 1、查询表信息(表名/表
问题 有没有办法获取代码中使用属性的位置,或声明成员变量的位置? 我不是在寻找解决此问题的方法,只是寻求一个简单的答案,无论这在技术上是否可行。 一些背景信息 我已经定义了一个属性,该属性使用提供给属
我是一名优秀的程序员,十分优秀!