2015-06-06 3 views
0

Так я пытаюсь передать объект, но он мне говорил:Почему он не передал мой объект?

Метод drawCommand(Launcher) в типе команды не применяется для аргументов()

и

a не может быть разрешен к переменной.

import java.awt.Color; 
import java.awt.Graphics; 
import java.util.Scanner; 

import javax.swing.JFrame; 

public class Launcher extends JFrame { 
    Launcher() { 
     setSize(300, 400); 
     setTitle("An Empty Frame"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    private int width = 1000; 
    private int hight = 750; 

    public static void main(String[] args) { 

     Launcher a = new Launcher(); 
     a.repaint(); 
     a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     a.setTitle("Grafik"); 
     a.setSize(1000, 750); 
     a.setVisible(true); 
     a.operand(); 
    } 

    public void paint(Graphics stift) { 

     stift.drawString("A A A A A A A A A A ", 50, 50); 
     stift.setColor(Color.LIGHT_GRAY); 

     for (int i = 0; i < width; i = i + 10) 
      stift.drawLine(i, 0, i, hight); 

     for (int i = 0; i < hight; i = i + 10) 
      stift.drawLine(0, i, width, i); 
    } 

    public void operand() { 

     System.out.println("Bitte geben sie etwas ein: "); 
     Scanner eingabe1 = new Scanner(System.in); 
     String command = eingabe1.nextLine(); 
     // if(eingabe1!=null) 
     // eingabe1.close(); 
     switch (command) { 
     case "A": 
      Command c = new Command(); 
      c.drawCommand(a);    // here are the error messages 
      System.out.println("draw fertig"); 
      // fenster.repaint(); 
      System.out.println("repaint fertig"); 
     } 
    } 
} 

Это где приходит от:

import java.awt.Color; 
import java.awt.Graphics; 
import java.util.Scanner; 

public class Command extends Commands { 

    private String text = ""; 


    public Command() { 
     super(); 
     text = ""; 
    } 


    public Command(int width, int hight, int[] cornerLocation, String text) { 
     super(width, hight, cornerLocation); 
     this.text = text; 
    } 

    public void drawCommand(Launcher a) { 

     System.out.println("Bitte geben sie den Text ein: "); 
     Scanner eingabe2 = new Scanner(System.in); 
     text = eingabe2.nextLine(); 
//  if(eingabe2!=null) 
//   eingabe2.close(); 

    } 

    public void paint(Graphics stift) { 

     stift.setColor(Color.RED); 
     stift.drawString("Hasebraten ",150,150); 
     stift.drawRect(cornerLocation[0], cornerLocation[1], width, hight); 
    } 

} 

Так как я еще новичок в JFrames и графика я получаю ошибки постоянно, но я не могу решить эту одну

ответ

3

В коде здесь, где возникает ошибка, в области нет переменной a, поэтому компилятор вам это сообщает.

switch (command) { 
    case "A": 
     Command c = new Command(); 
     c.drawCommand(a);    // a is not in scope here so this does not compile.. 
     System.out.println("draw fertig"); 
     // fenster.repaint(); 
     System.out.println("repaint fertig"); 
    } 

Однако вы есть Launcher доступны в это время, потому что класс в вопросе является Launcher сам.

Если изменить код, чтобы быть:

c.drawCommand(this); 

Затем Launcher объект, который вызывая drawCommand метод Command объекта, будет выдавать себя методу drawCommand как Launcher.

Это соответствует ожиданиям синтаксиса и пройдет мимо этой конкретной ошибки.

Я не совсем уверен, что вы намерены делать код, и поэтому я не уверен, действительно ли это решит все ваши проблемы, но это, безусловно, переместит вас за эту конкретную ошибку.

+0

Работает отлично! Спасибо за подробный ответ! –

+0

(Просто для того, чтобы прояснить, я пытаюсь написать программу, которая рисует диаграммы Насси-Шнейдермана. Говоря с 6 вариантами: command, if, ifelse, switchcase, for, while и do while, вы выбираете макет прямоугольников он должен рисовать, затем с помощью другого ввода вы говорите, что должны сказать прямоугольники. Извините за неправильное написание, а не на родном английском языке.) –

0

Launcher a не входит в сферу действия operand() функция. Вам нужно добавить аргумент Launcher в operand() и передать пусковую установку.

Смежные вопросы