簡體   English   中英

Java:無法將方法從一個類調用到另一個類

[英]Java: having trouble calling a method from one class into another

仍在嘗試掌握Java中類和方法的工作方式。 為了進行實驗,我嘗試創建一個圖形類,其中包含一個無效的繪制框方法。 然后,我嘗試在main方法中調用該方法以嘗試繪制這些框。 我收到“無法解析為變量”錯誤,我認為這意味着主類由於某種原因無法看到我的其他類?

Boxymain.java:

import java.awt.*;
import javax.swing.JFrame;

public class Boxymain extends Canvas {
    public static void main(String[] args){
        BoxyMethod c = new BoxyMethod();            
        c.drawBox(window, Color.RED, 200, 300);

        JFrame win = new JFrame("Boxy Main");
        win.setSize(800,600);
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Boxymain canvas = new Boxymain();
        win.add(canvas);
        win.setVisible(true);  
    }  
}

BoxyMethod.java:

import java.awt.*;
import javax.swing.JFrame;

public class BoxyMethod {   
    public void drawBox(Graphics window, Color c, int x, int y){
        window.setColor(c);
        window.fillRect(x, y, 100, 100);
        window.setColor(Color.WHITE);
        window.fillRect(x+10,y+10,80,80);
        }   
}

錯誤文本:“窗口無法解析為變量。”

錯誤消息告訴您確切是什么地方。 您要將窗口變量傳遞到drawBox方法中,但是在執行此操作之前,您無需在main方法中聲明或初始化這樣的變量,因此在Java中無法做到這一點。

BoxyMethod c = new BoxyMethod();        
// *** window variable below is used but never declared prior to use
c.drawBox(window, Color.RED, 200, 300); 

但更重要的是,您沒有正確執行Swing繪圖。

相反,您應該創建一個擴展JPanel的類,為它提供一個paintComponent(Graphics g)方法重寫,並繪制該方法。 然后將該JPanel放在JFrame中並顯示JFrame。 請查看“ 執行自定義繪畫 Swing圖形”教程,以獲取有關如何執行Swing圖形的更多詳細信息。

順便說一句,由於已過期30年,因此請勿遵循已鏈接的教程。


例如:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.*;

public class BoxyTest {

   private static void createAndShowGui() {
      JFrame frame = new JFrame("Boxy Test");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(new BoxyPanel(200, 300));
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

@SuppressWarnings("serial")
class BoxyPanel extends JPanel {
   private static final int PREF_W = 800;
   private static final int PREF_H = 650;
   private int myX;
   private int myY;

   public BoxyPanel(int myX, int myY) {
      this.myX = myX;
      this.myY = myY;
   }

   @Override // so my JPanel will be big enough to see
   public Dimension getPreferredSize() {
      if (isPreferredSizeSet()) {
         return super.getPreferredSize();
      }
      return new Dimension(PREF_W, PREF_H);
   }

   @Override
   protected void paintComponent(Graphics g) {
      // call super method so that the JPanel can do housekeeping painting
      super.paintComponent(g);
      g.fillRect(myX, myY, 100, 100);
      g.setColor(Color.WHITE);
      g.fillRect(myX + 10, myY + 10, 80, 80);
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM