2013-12-23 4 views
0

Я не могу сделать ссылку на класс Цвета от класса Square. Я создал ссылку раньше, но это, похоже, происходит, когда класс расширяет другой класс, например Canvas, в этом случае.Не удается получить доступ к компонентам с использованием ссылки

Вот мой код:

Цвета:

import java.awt.*; 

import javax.swing.*; 




public class Colours extends Canvas { 

Colours(){ 
JPanel menupn; 
ButtonGroup group; 
JRadioButton square; 
JRadioButton rect; 
JRadioButton circle; 
JFrame frame; 
JPanel sqpn; 
JPanel crpn; 
JPanel rtpn; 
Circle Circle; 
Rect Rect; 
Square Square; 

Circle = new Circle(); 
Rect = new Rect(); 
Square = new Square(this); 
menupn = new JPanel(); 
group = new ButtonGroup(); 
square = new JRadioButton("Square"); 
rect = new JRadioButton("Rectangle"); 
circle = new JRadioButton("Circle"); 
frame = new JFrame("Colours"); 

frame.setSize(1000,500); 
frame.setLayout(null); 

group.add(square); 
group.add(circle); 
group.add(rect); 
group.setSelected(square.getModel(),true); 

square.addActionListener(Square); 

circle.addActionListener(Circle); 

rect.addActionListener(Rect); 

menupn.setLayout(new GridLayout(3,1)); 
menupn.add(square); 
menupn.add(circle); 
menupn.add(rect);  
menupn.setBounds(0, 360, 1000, 100); 

this.setBackground(new Color(255,255,255)); 
this.setBounds(0,0,1000,400); 

frame.add(menupn); 
frame.add(this); 



frame.setVisible(true); 


} 

public void paint(Graphics g){ 

    g.fillRect(0,0,50,50); 
    g.fillOval(100,100,50,50); 
    g.fillRect(200,200,100,50); 
} 



public static void main(String[] args) { 

    Colours Colours = new Colours(); 

} 
} 

Форма:

import java.awt.Color; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JTextField; 
import javax.swing.JPanel; 
import javax.swing.JLabel; 



public class Square implements ActionListener { 
Colours Colours; 
JPanel panel; 
JTextField colfld1; 
JTextField colfld2; 
JTextField colfld3; 
JTextField locx; 
JTextField locy; 


Square(Colours Colours){ 
    this.Colours = Colours; 
} 

public void actionPerformed(ActionEvent e) { 

    panel = new JPanel(); 
    colfld1 = new JTextField(3); 
    colfld2 = new JTextField(3); 
    colfld3 = new JTextField(3); 
    locx = new JTextField(4); 
    locy = new JTextField(3); 
    JLabel positionx = new JLabel("X Axis Position"); 
    JLabel positiony = new JLabel("Y Axis Position"); 
    JLabel rgb = new JLabel("RGB Value"); 
    panel.setBackground(new Color(0,0,0)); 
    panel.setBounds(0, 0, 100, 200); 

} 

} 

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

+2

Я хотел бы начать, имея чтения через [Код конвенции для языка программирования Java] (http://www.oracle. com/technetwork/java/codeconv-138413.html), не смешивайте тяжелые и легкие компоненты и понимайте, как [макет управляет] (http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html) Работа. Я также хотел бы взглянуть на [Выполнение пользовательской живописи] (http://docs.oracle.com/javase/tutorial/uiswing/painting/) и [Живопись в AWT и Swing] (http://www.oracle. com/technetwork/java/painting-140037.html), так что вы понимаете, как работает painitng – MadProgrammer

+0

В чем проблема. Похоже, вы используете 'Colors' внутри' Square' с 'this.Colours = Colors;' внутри внутри конструктора 'Square'. Это дает вам ошибку? –

+0

@Sam Я Нет Это не – user3130960

ответ

5

Вы объявляете переменные компонента Colors внутри своего конструктора. Это означает, что эти переменные недоступны вне конструктора. Вместо этого вы хотите объявить их как поля в классе.

Другими словами, переместить эти строки:

JPanel menupn; 
ButtonGroup group; 
JRadioButton square; 
JRadioButton rect; 
JRadioButton circle; 
JFrame frame; 
JPanel sqpn; 
JPanel crpn; 
JPanel rtpn; 
Circle Circle; 
Rect Rect; 
Square Square; 

Выше этой линии:

Colours(){ 
+0

+1 - Из любопытства, знаете ли вы, что это проблема в java, тоже создайте экземпляр переменной класса как самого имени класса, например. 'Colours Colours'?Я никогда не видел этого раньше и пытался найти ответ – fdsa

+0

@fdsa Помимо удобочитаемости, нет, я не думаю, что есть проблема – MadProgrammer

+0

@MadProgrammer Хорошо, я знаю. – fdsa

3

Все переменные в пределах Colours являются локальными для конструктора классов. Это означает, что они никогда не смогут получить доступ к стороне конструктора.

Рассмотрим две вещи ...

  1. Moving переменные, которые вы можете получить доступ позже, вне конструктора
  2. Рассмотрите возможность использования-акцессоры методы, чтобы получить доступ к этим переменным вы хотели бы вне класса иметь доступ. Это предотвращает другие классы от баловаться с Colours таким образом, вы не хотите, чтобы они

я бы ALOS предположить, что у вас есть чтение через Code Conventions for the Java Programming Language, не смешивать тяжелую и легкую массу (Canvas и JPanel) компоненты и понять, как layout manages работа.

Я хотел бы также рассмотреть вопрос о принятии смотреть на Performing Custom Painting и Painting in AWT and Swing, так что вы понимаете, как работает painitng

+0

Кроме того, вы тоже это поняли. – user3130960

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