Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2017, 18:27   #1
Nadya13
Новичок
Джуниор
 
Регистрация: 15.11.2017
Сообщений: 2
По умолчанию Java (простое GUI)

Здравствуйте. Джаву начала изучать только недавно, так что вопросы могут быть глупыми, прошу прощения заранее(
Задача состоит в том, чтобы при нажатии на кнопки рисовались фигуры, а именно прямоугольник, круг, треугольник и с ними производилось движение отталкивание от рамки окна(как заставка в Винде).
У меня получилось создать прямоугольник, но с кругом ошибку выдает(

Код программы
Код:
import java.awt.*;
import java.awt.event.*;

class MyWindowListener extends WindowAdapter 
{
	public void windowClosing(WindowEvent e) 
	{
		System.out.println("Close");
		System.exit(0);
	}
} 
class MyPanel extends Panel{
	private static int x1;
	private static int x2;
	private static int y1;
	private static int y2;
	
	public static  void setRectangle(int c1, int c2, int c3, int c4){
		x1 = c1;
		x2 = c2;
		y1 = c3;
		y2 = c4;
	}
        public static  void setCircle(int c1, int c2, int c3, int c4){
		x1 = c1;
		x2 = c2;
		y1 = c3;
		y2 = c4;
	}
	
	public void paintComponent(Graphics g){
		super.paintComponent(g);
                g.setColor(Color.red);
		g.fillRect(x1,x2,y1,y2);
                g.fillOval(x1, x2, y1, y2);
	}
   public MyPanel(){
			setLayout(null);
	}
}

public class Paint extends Frame{
 
	 Panel panel = new Panel();
	 Button button1 = new Button("Rectangle");
         Button button2 = new Button("Circle");
	
	public Paint(){
		Frame mf = new Frame("Paint Test");
		mf.setLayout(new BorderLayout());
		mf.setSize(500,500);
		mf.add(panel, BorderLayout.CENTER);
		mf.add(button1, BorderLayout.NORTH);
                mf.add(button2, BorderLayout.SOUTH);
			button1.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent ae){
					panel.setRectangle(10, 150, 60, 50);
					panel.repaint();
				}
			});
                        button2.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent ae){
					panel.setCircle(10, 250, 50, 50);
					panel.repaint();
				}
			});
                this.addWindowListener(new MyWindowListener());
		mf.setVisible(true);
	}
	
	
	public static void main(String[] args){
        System.out.println("Start.app");
	Paint mf = new Paint();
	System.out.println("Finish.app");
	}
}
Ошибка возникает при вызове на панели метода setCircle:
variable panel of type Panel

Последний раз редактировалось Аватар; 17.11.2017 в 19:00.
Nadya13 вне форума Ответить с цитированием
Старый 25.11.2017, 12:30   #2
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

В вашем классе MyPanel нет необходимости использовать static поля и static методы. Так же прямоугольник и овал рисовались по одним координатам, что привело бы к перекрытию, т.е. овал не было бы видно.

Код:
import java.awt.*;

public class MyPanel extends Panel {

    private int recX;
    private int recY;
    private int recWidth;
    private int recHeight;

    private int cirX;
    private int cirY;
    private int cirWidth;
    private int cirHeight;

    public MyPanel() {
        setLayout(null);
    }

    public void setRectangle(int x, int y, int width, int height) {
        this.recX = x;
        this.recWidth = y;
        this.recY = width;
        this.recHeight = height;
    }

    public void setCircle(int x, int y, int width, int height) {
        this.cirX = x;
        this.cirY = y;
        this.cirWidth = width;
        this.cirHeight = height;
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.red);
        g.fillRect(recX, recY, recWidth, recHeight);
        g.fillOval(cirX, cirY, cirWidth, cirHeight);
    }

}
Причина вашей ошибки: в классе Paint вместо MyPanel создавалась обычная Panel. Так же класс Paint уже расширяет класс Frame, а значит не надо создавать еще один экземпляр Frame в конструкторе (к тому же слушатель закрытия устанавливался не этому экземпляру)

Код:
import java.awt.*;
import java.awt.event.*;

public class Paint extends Frame {

    private MyPanel panel = new MyPanel();
    private Button button1 = new Button("Rectangle");
    private Button button2 = new Button("Circle");

    public Paint() {
        super("Paint Test");

        add(panel, BorderLayout.CENTER);
        add(button1, BorderLayout.NORTH);
        add(button2, BorderLayout.SOUTH);

        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                panel.setRectangle(10, 150, 60, 50);
                panel.repaint();
            }
        });

        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                panel.setCircle(10, 250, 50, 50);
                panel.repaint();
            }
        });

        addWindowListener(new MyWindowListener());

        setSize(500, 500);
        setVisible(true);
    }

    public static void main(String[] args) {
        System.out.println("Start.app");
        new Paint();
        System.out.println("Finish.app");
    }

}
BleStaR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Я начал учить java и у меня проблемы c GUI JAVA, NaTenMind Общие вопросы по Java, Java SE, Kotlin 4 25.07.2017 16:21
простое GUI приложение NBAskel Visual C++ 0 22.01.2012 17:53
Java GUI Julila Помощь студентам 0 08.11.2011 13:34
Java GUI konstantinopol Общие вопросы по Java, Java SE, Kotlin 2 30.01.2009 22:22