所以我正在制作游戏,在有人获胜后,我想要一个运行方法,显示“x已经赢了”或“y已赢了”。现在我的问题是,如果我创建方法来绘制包含胜利消息的字符串,那么我的IDE不允许我这样做,因为我无法运行一个显然使用Graphics g作为参数的方法。
还有其他方法可以在JFrame屏幕上显示消息吗?
这是我的代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;`
//nothing wrong here :P
public class Demonstration extends JFrame {
private JButton b1;
private JButton b2;
public Demonstration () {
//My constructor
JPanel panel = new JPanel();
panel.setLayout(null);
add(panel);
handler h = new handler();
b1 = new JButton("yes");
b2 = new JButton("no");
//A sub - class to handle events. Created below
b1.setBounds(34, 34, 34, 34);
//random
panel.add(b1);
b1.addActionListener(h);
b2.setBounds(56, 56, 56, 56);
// random again
panel.add(b2);
b2.addActionListener(h);
setTitle("Demonstration");
setBackground(Color.BLACK);
setDefaultCloseOperation(3);
setSize(720, 720);
setVisible(true);
}
}
那是我的小组。
public static void main (String[] args) {
new Demonstration();
}
因此,让我们说我稍后创建了处理程序类,并且我希望它运行一段代码,其中包含if / else,单击了哪个按钮(.getSource())并且我想使用Graphics来重新设计接口并打印出胜利信息,我该怎么做?
答案 0 :(得分:1)
通常,您不会显式调用带Graphics
的方法。相反,你应该覆盖一个接受它的方法,让Swing在正确的时间为你调用方法。
对于JFrame
,您覆盖的方法是paint(Graphics)
。但是,建议您避免扩展JFrame
,而是扩展JPanel
,覆盖其paintComponent
方法,并将该自定义组件添加到JFrame
public class Demonstration extends JPanel{
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
//Do your drawing here
}
}
这将确保在需要时重新绘制组件(例如,如果JFrame
已调整大小),并且还避免在组件稍后重新绘制时将绘制的内容重新绘制。
答案 1 :(得分:1)
当然,您可以运行以Graphics
作为参数的方法。任何Swing应用程序都这样做。您也可以手动执行此操作,但在这种情况下,问题通常是如何获取正确的Graphics
实例来绘制您想要绘制的位置。
有时您想要做的是扩展一些JComponent
(通常为JPanel
)并覆盖其paintComponent(Graphics)
方法。该方法接收的Graphics
对象适合在该组件上绘制。然后,确保该组件的实例属于由应用程序的顶级窗口管理的组件之一。
或者,有时可能适合更改其他组件中的数据,例如JLabel
或JButton
的文本或{的内容{1}}。
另外考虑一下,为了显示某种风格的公告信息,弹出对话框可能是合适的。有多种方法可以构建和显示这样的对话框,但JTextArea
提供了一些可能对您有用的快捷方式。
答案 2 :(得分:1)
还有其他方法可以在JFrame屏幕上显示消息吗?
不要尝试自定义绘画。
我会使用JOptionPane
。
阅读有关如何制作对话框的Swing教程中的部分以获取更多信息。
您可以使用简单的JOptionPane.showMessageDialog(...)
方法。