Java新GUI问题
不久前我发布了一个问题。我有不同的问题。就图形处理而言,我已经修改了代码,但仍然不能正常工作 它的底部框架画得非常好(一个按钮等)。除此之外,刽子手游戏本身应该是平局。不是。它根本没有画任何东西。我不知道该怎么办。我快疯了,因为这是我今晚的最后一个项目!谁能帮帮我吗 这是我的代码:(我尽量省略代码,但是如果你需要整个程序来测试你自己 下面是它正在做的事情的图像: 如果我没有弄错的话,我正在使用以下代码行将刽子手游戏部分本身添加到表单中:Java新GUI问题,java,swing,user-interface,awt,Java,Swing,User Interface,Awt,不久前我发布了一个问题。我有不同的问题。就图形处理而言,我已经修改了代码,但仍然不能正常工作 它的底部框架画得非常好(一个按钮等)。除此之外,刽子手游戏本身应该是平局。不是。它根本没有画任何东西。我不知道该怎么办。我快疯了,因为这是我今晚的最后一个项目!谁能帮帮我吗 这是我的代码:(我尽量省略代码,但是如果你需要整个程序来测试你自己 下面是它正在做的事情的图像: 如果我没有弄错的话,我正在使用以下代码行将刽子手游戏部分本身添加到表单中: private Hangman.Hangman_Pane
private Hangman.Hangman_Panel canvas = new Hangman.Hangman_Panel();
//Constructor
public Hangman() {
this.add(canvas, BorderLayout.CENTER); // Add canvas to center
快速尝试代码会出现一个明显的异常,即您忘记在paint方法上检查字符串是否为null
g.drawString(message, 40, BaseY+25);
g.drawString(information, 25, BaseY+45);
g.drawString(new String (GuessWord), 140, BaseY-120);
我知道你的家庭作业很快就要交了,但我强烈建议你,把它看作是对你未来编程生涯的一项投资。快速尝试你的代码会给你一个明显的例外,你忘记在画图方法上检查字符串是否为null
g.drawString(message, 40, BaseY+25);
g.drawString(information, 25, BaseY+45);
g.drawString(new String (GuessWord), 140, BaseY-120);
我知道你的作业很快就要交了,但我强烈建议你,把它看作是对你未来编程生涯的一项投资。至少有三个问题对你不利 首先。。。 您正在覆盖
绘制
,但调用了super.paintComponent
。这是一个非常糟糕的主意,您跳过了绘制链中的一系列链接
相反,重写paintComponent
并调用super.paintComponent
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//...
其次
paint
方法中依赖的某些值尚未初始化
g.drawString(message, 40, BaseY + 25);
g.drawString(information, 25, BaseY + 45);
第一次调用paint
时,消息
和信息
为null
,导致NullPointerException
作为旁注,新字符串(“欢迎来到HANGMAN!”)
通常是不必要的。欢迎来到HANGMAN!”
不需要通过字符串
构造函数,编译器将自动为您完成此操作
你可以用
g.drawString("WELCOME TO HANGMAN!", 75, 40);
取而代之的是…(但是GuessWord
仍然是null
),首先尝试初始化这些值,例如
private String message = ""; // Message displaying either Error or Victory
private String information = ""; // Secondary Message
private String RealWord = ""; // The Real word
private StringBuffer GuessWord = new StringBuffer();// The Guessed word
第三
你混合了重(AWT)和轻(Swing)两种成分。它们往往不能很好地结合在一起
我建议改用JButton
、JLabel
和JTextField
此外,您可能会通过阅读获得一些帮助。这将使您的代码更容易让其他人阅读…至少有三个问题对您不利 首先。。。 您正在覆盖
绘制
,但调用了super.paintComponent
。这是一个非常糟糕的主意,您跳过了绘制链中的一系列链接
相反,重写paintComponent
并调用super.paintComponent
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//...
其次
paint
方法中依赖的某些值尚未初始化
g.drawString(message, 40, BaseY + 25);
g.drawString(information, 25, BaseY + 45);
第一次调用paint
时,消息
和信息
为null
,导致NullPointerException
作为旁注,新字符串(“欢迎来到HANGMAN!”)
通常是不必要的。欢迎来到HANGMAN!”
不需要通过字符串
构造函数,编译器将自动为您完成此操作
你可以用
g.drawString("WELCOME TO HANGMAN!", 75, 40);
取而代之的是…(但是GuessWord
仍然是null
),首先尝试初始化这些值,例如
private String message = ""; // Message displaying either Error or Victory
private String information = ""; // Secondary Message
private String RealWord = ""; // The Real word
private StringBuffer GuessWord = new StringBuffer();// The Guessed word
第三
你混合了重(AWT)和轻(Swing)两种成分。它们往往不能很好地结合在一起
我建议改用JButton
、JLabel
和JTextField
此外,您可能会发现通读一些帮助。这将使您的代码更容易让其他人阅读…您仍在跟进上一个问题的答案,而这个问题对于StackOverflow来说实在太宽泛了。我不会说您的代码太多-但如果您这样做了,它是否在应用中也不会有任何区别或者在这里。最好放在这里,这样我们就不必在问题和代码之间来回点击。我怀疑“代码太多了”批评的焦点应该是你没有制作一个小程序来演示你的问题;而不是代码在页面上占用了多少空间。如果你将
super.paintComponent(g);
更改为super.paint(g);
?同样的结果(我也为你更改了页面的格式:)如果在我启动表单时有什么不同的话,这些错误会显示在输出控制台中:好的,我现在有点忙,但是如果那时没有其他人给你答案的话,我将在大约8个小时左右的时间内对此进行调查。你仍然在跟进上一个问题的答案,这个问题对于StackOverflow来说实在太广泛了哦。我不会说你有太多的代码——但是如果你有,它在pastebin还是在这里都没有什么区别。最好是在这里,这样我们就不必在问题和代码之间来回点击。我怀疑“代码太多”批评的焦点应该是你没有制作一个小程序来演示你的问题;而不是代码在页面上占用了多少空间。如果你将super.paintComponent(g);
更改为super.paint(g);
?同样的结果(我也为你更改了页面的格式:)如果在我启动表单时有什么不同的话,这些错误会显示在输出控制台中:好的,我现在有点忙,但是如果没有其他人给你答案的话,大约8小时后我会有时间调查这个问题