2013-08-24 3 views
0

это мой первый пост, и я очень новичок в программировании (преподаю сам). Пожалуйста, простите меня, если моя терминология не соответствует действительности, или я делаю какие-либо другие ошибки. Я пытаюсь написать программу, которая использует два класса для ввода пользователя и использования этого ввода для рисования простого прямоугольника на экране. Я получил все, чтобы работать, но я не могу получить узнаваемый пользовательский контент. Я определил переменную «x», и пользователь вводит значение для этого, но это значение передается как «0» каждый раз. Пользователю будет предложено ввести целочисленное значение, которое будет использоваться как значение «x» при создании fillrectangle. Однако при запуске значение x всегда равно «0». Так или иначе переменная «х» не изменяется на введенное пользователем значение.Установка переменных, которые должны быть распознаны другими методами

Ниже мой код, такой же бедный, как может быть. Надеюсь, кто-то может дать мне пару идей.

ГЛАВНЫЙ КЛАСС

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

public class first { 


    public static void main(String[] args) { 

     second p = new second(); 
     p.setValues(); 
     p.getX(); 
     JFrame j = new JFrame("New Rectangle"); 
     j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     second t = new second(); 
     j.add(t); 
     j.setSize(500,500); 
     j.setVisible(true); 


    } 

} 

ВТОРОЙ КЛАСС

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.util.*; 

public class second extends JPanel{ 
    int x; 

    public void setValues() 
    { 
     Scanner s = new Scanner(System.in); 
     System.out.println("Enter the X value"); 
     x = s.nextInt(); 

    } 



    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     this.setBackground(Color.WHITE); 

     System.out.println(x); 
     g.setColor(Color.BLUE); 
     g.fillRect(x, 20, 50, 50); 

    } 
} 
+0

Нужен код для second.getX(). –

+0

@ user2714543 На самом деле код не так уж плох. Единственное, что я вижу, это то, что по соглашению имена классов должны быть капитализированы. –

ответ

1

Похоже, проблема в том, что вы собираете информацию, используя объект, на который ссылается переменная с именем p, но затем обратить на экран с объектом, на который ссылается переменная t. Переменные не распределяются между классами, если они не являются статическими. Для получения дополнительной информации см. Эту документацию.

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

Один из способов помочь себе это думать о классе, как только копирку. Вы описываете, как будут выглядеть данные и как с ними будет работать. Когда вы будете готовы что-то сделать из своего плана, вы используете ключевое слово new. В этот момент у вас есть новый объект на основе вашего описания из чертежа, то есть файла класса.

Чтобы использовать пример реального мира: если у вас есть проект для определенного типа дома, и вы и я оба построили наши дома именно по спецификации этого чертежа, можно сказать, что у нас один и тот же дом. Но на самом деле мы этого не делаем; если у меня будет 20 кошек, и мой дом станет вонючим, твой дом не воняет. Наши планы идентичны, но то, что происходит внутри каждого из наших домов, сильно отличается.

Чтобы сделать код работы, просто избавиться от переменной t и вызовите j.add(p);

EDIT: Добавление немного больше деталей. Причина, по которой значение всегда равно 0, состоит в том, что Java выбирает значение по умолчанию для примитивного типа, когда оно сначала инициализируется. В случае целых чисел, то значение по умолчанию равно 0.

+0

Большое спасибо! Ты прав. Я вызывал два разных экземпляра, поэтому, как только я сделал рисунок в том же экземпляре, что и ввод, все это сработало. – user2714543

0

Причина х значение всегда 0, потому что вы создаете еще один экземпляр, когда вы говорите

second t = new second(); //Creates a new instance of x (another copy of x) 

Если вы просто делаете System.out.print(p.x); после p.setValues() вы получите правильное значение x.

Что касается вашего кода, я не совсем понимаю причину, по которой p существует. Просто выполните что-то подобное:

JFrame j = new JFrame("New Rectangle"); 
    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    second t = new second(); 

    t.setValues(); 
    j.add(t); 
    j.setSize(500, 500); 
    j.setVisible(true); 
+0

Да, это было то, что было. Большое спасибо за то, что нашли время ответить! – user2714543

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

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