如何调用以Graphics g作为参数的方法?

时间:2015-10-15 13:36:37

标签: java swing methods graphics jpanel

所以我正在制作游戏,在有人获胜后,我想要一个运行方法,显示“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来重新设计接口并打印出胜利信息,我该怎么做?

3 个答案:

答案 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对象适合在该组件上绘制。然后,确保该组件的实例属于由应用程序的顶级窗口管理的组件之一。

或者,有时可能适合更改其他组件中的数据,例如JLabelJButton的文本或{的内容{1}}。

另外考虑一下,为了显示某种风格的公告信息,弹出对话框可能是合适的。有多种方法可以构建和显示这样的对话框,但JTextArea提供了一些可能对您有用的快捷方式。

答案 2 :(得分:1)

  

还有其他方法可以在JFrame屏幕上显示消息吗?

不要尝试自定义绘画。

我会使用JOptionPane

阅读有关如何制作对话框的Swing教程中的部分以获取更多信息。

您可以使用简单的JOptionPane.showMessageDialog(...)方法。