Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 要创建一个使用鼠标输入并实现drawLines()的框架_Java_Swing - Fatal编程技术网

Java 要创建一个使用鼠标输入并实现drawLines()的框架

Java 要创建一个使用鼠标输入并实现drawLines()的框架,java,swing,Java,Swing,我试图创建一个从鼠标输入的框架,并使用drawLines()在框架上制作x/o网格。但我只能做其中一个 这是我的密码: public class Test extends JPanel { public static void main(String[] args) { Test t = new Test(); t.dispFrame(); } public static void dispFrame() {

我试图创建一个从鼠标输入的框架,并使用
drawLines()
在框架上制作x/o网格。但我只能做其中一个

这是我的密码:

public class Test extends JPanel {
    public static void main(String[] args) {

        Test t = new Test();  
        t.dispFrame();

    }

    public static void dispFrame()
     {
        JFrame frame = new JFrame("My New Frame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(300, 300));

        frame.setResizable(false);

         JPanel panel=new JPanel();
         panel.addMouseListener(new MouseListener()
         {                         
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println(":MOUSE_CLICK_EVENT:");
            }

             @Override
             public void mousePressed(MouseEvent e) {
                 System.out.println("\n:MOUSE_PRESSED_EVENT:");
             }

             @Override
             public void mouseReleased(MouseEvent e) {
                 System.out.println(":MOUSE_RELEASED_EVENT:");
             }

             @Override
             public void mouseEntered(MouseEvent e) {
                 System.out.println(":MOUSE_ENTER_EVENT:");
             }

             @Override
             public void mouseExited(MouseEvent e) {
                 System.out.println(":MOUSE_EXITED_EVENT:");
             }

         });
         frame.add(panel);
         frame.pack();
         frame.setVisible(true);
     }

      @Override
      public void paintComponent(Graphics g)
      {
        super.paintComponent(g);
        g.drawLine(30,100,270,100);
        g.drawLine(30,200,270,200);
        g.drawLine(100,35,100,250);
        g.drawLine(200,35,200,250);   
      }
}

如果要覆盖面板上的
paintComponent()
方法,应执行以下操作:

JPanel panel = new JPanel() {
  @Override
  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    g.drawLine(30,100,270,100);
    g.drawLine(30,200,270,200);
    g.drawLine(100,35,100,250);
    g.drawLine(200,35,200,250);   
  }
};

在您的代码中,您正在覆盖
Test
类中的
paintComponent(),如果您的
Test
类本身不是子类
Component

JFrame没有paintComponent方法,并且您无论如何都不应该覆盖顶级容器的绘制Jpanel没有采用StringStart的构造函数,请看一看可能会对整个设计是错误的。例如,最好扩展JFrame而不是JPanel。无论如何,它不会与一个油漆组件。不幸的是,我现在无法编写示例,但您应该看看您可以在Oracle的website@prmottajr实际上,设计正朝着正确的方向发展,从JFrame扩展到单个用例,而且,您并没有真正扩展框架本身的功能。您还应该避免覆盖顶层容器的绘制,因为它们不是双缓冲的,并且它们的子组件可以使用调用的frames-paint方法独立绘制,这会导致无休止的奇怪。将定制绘画放入类似JPanel的东西中是更好的选择solution@MadProgrammer嗯,好吧,你说得有道理。我想的更多的是一个简单的例子。但是,如果这个想法是创建一个新的(游戏板)组件,它能够自己绘制,那么添加MouseListener作为一个匿名的内部类,可读性就会很差。我认为这将取决于目标,我更喜欢一个可以扩展JPanel的板和一个在游戏创建过程中添加的单独鼠标听写器,但我认为这与问题无关