Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Вызов конструктора из другого конструктора.

Читайте также:
  1. I. Вызов биржевой игры
  2. А) с использованием конструктора таблиц
  3. Бросившие вызов смерти
  4. Бросившие вызов смерти
  5. Взгляд со стороны Другого
  6. Взгляните на мир глазами другого

 

Часто для того, чтобы избежать написание повторяющегося кода инициализации, необходимо вызвать код одного конструктора из другого.

 

Вот пример, как это можно делать:

public class SomeClass {

int a;

int b;

int c;

public SomeClass(int a, int b){

this.a = a;

this.b = b;

}

public SomeClass(int a, int b, int c){

// Вызов конструктора с двумя параметрами.

this(a, b);

this.c = c;

}

public void Show(){

System.out.println("a = " + a);

System.out.println("b = " + b);

System.out.println("c = " + c);

}

}

 

Как вы видите, для этого используется ключевое слово this, после которого в круглых скобках указываем параметры для соответствующего конструктора (с двумы параметрами в данном случае).

 

Игра «Пятнашки»

 

 

package prjavapytna;

 

import javax.swing.UIManager;

import java.awt.*;

 

public class ApplicationPytna

{

boolean packFrame = false;

/**Construct the application*/

public ApplicationPytna()

{

FramePytna frame = new FramePytna();

//Validate frames that have preset sizes

//Pack frames that have useful preferred

//size info, e.g. from their layout

if (packFrame)

{

frame.pack();

}

else

{

frame.validate();

}

//Center the window

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = frame.getSize();

if (frameSize.height > screenSize.height)

{

frameSize.height = screenSize.height;

}

if (frameSize.width > screenSize.width)

{

frameSize.width = screenSize.width;

}

frame.setLocation((screenSize.width - frameSize.width) / 2,

(screenSize.height - frameSize.height) / 2);

frame.setVisible(true);

}

/**Main method*/

public static void main(String[] args)

{

try

{

UIManager.setLookAndFeel(

UIManager.getCrossPlatformLookAndFeelClassName());

}

catch(Exception e)

{

e.printStackTrace();

}

new ApplicationPytna();

}

}

 

package prjavapytna;

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class FramePytna extends JFrame

{

JPanel contentPane;

JPanel gamePane = new JPanel();

BorderLayout borderLayout1 = new BorderLayout();

//линия статус бара

JLabel status= new JLabel();

//массив кнопочек

JButton[][] buttons = new JButton[4][4];

//матрица для хранения чисел

int[][] matrix = new int[4][4];

 

/**Construct the frame*/

public FramePytna()

{

enableEvents(AWTEvent.WINDOW_EVENT_MASK);

try

{

jbInit();

}

catch(Exception e)

{

e.printStackTrace();

}

}

/**Component initialization*/

private void jbInit() throws Exception

{

contentPane = (JPanel) this.getContentPane();

contentPane.setLayout(borderLayout1);

this.setSize(new Dimension(206,275));

this.setTitle("Пятнашки");

//запрещаем изменение размера окна

this.setResizable(false);

//Создаем основное меню

JMenuBar menuBar = new JMenuBar();

//Создаем подменю

JMenu menuGame = new JMenu("Игра");

JMenu menuHelp = new JMenu("Помощь");

//Добавляем подменю в основное меню

menuBar.add(menuGame);

menuBar.add(menuHelp);

//Устанавливаем полученное меню на окно

this.setJMenuBar(menuBar);

//Создаем элементы подменю Game с обработчиками событий

JMenuItem item1 = new JMenuItem("Новая игра");

JMenuItem item2 = new JMenuItem("Выход");

//Создаем элемент подменю Help с обработчиками событий

JMenuItem item3 = new JMenuItem("О игре...");

//Добавляем обработчики событий по нажатию

item1.addActionListener(new java.awt.event.ActionListener()

{

public void actionPerformed(ActionEvent e)

{

newGame();

}

});

item2.addActionListener(new java.awt.event.ActionListener()

{

public void actionPerformed(ActionEvent e)

{

System.exit(0);//Выход из системы

}

});

item3.addActionListener(new java.awt.event.ActionListener()

{

public void actionPerformed(ActionEvent e)

{

JOptionPane.showMessageDialog(null,

"Игра Пятнашки","Об игре",

JOptionPane.QUESTION_MESSAGE);

}

});

 

//Добавляем созданные элементы к подменю

menuGame.add(item1);

menuGame.add(item2);

menuHelp.add(item3);

gamePane.setLayout(null);

// добавляем кнопочки

int count=0;

for(int i = 0;i<4;i++)

for(int j = 0;j<4;j++)

{

buttons[i][j] = new JButton(""+count);

//устанавливаем обработчик событий

buttons[i][j].addMouseListener(new mAdapter(i,j));

buttons[i][j].setSize(50,50);

buttons[i][j].setLocation(50*j,50*i);

buttons[i][j].setCursor(new Cursor(Cursor.HAND_CURSOR));

gamePane.add(buttons[i][j]);

matrix[i][j]=count;//задаем матрицу

count++;

}

buttons[0][0].setText(" ");

//Добавляем игровую панель с кнопками

contentPane.add(gamePane,BorderLayout.CENTER);

//обрамляем строку статуса

status.setBorder(BorderFactory.createEtchedBorder());

//Добавляем строку статуса

contentPane.add(status,BorderLayout.SOUTH);

//новая игра

newGame();

}

/**Overridden so we can exit when window is closed*/

protected void processWindowEvent(WindowEvent e)

{

super.processWindowEvent(e);

if (e.getID() == WindowEvent.WINDOW_CLOSING)

{

System.exit(0);

}

}

/**Случайным образом переставляем элементы матрицы*/

public void randomizeMatrix()

{

for(int i = 0;i<100;i++)

{

int a = (int)(Math.random()*4);

int b = (int)(Math.random()*4);

int a2 = (int)(Math.random()*4);

int b2 = (int)(Math.random()*4);

 

int c = matrix[a][b];

matrix[a][b] = matrix[a2][b2];

matrix[a2][b2] = c;

}

}

/**Начинаем новую игру*/

public void newGame()

{

randomizeMatrix();

for(int i = 0;i<4;i++)

for(int j = 0;j<4;j++)

{

//пишем на кнопочках числа из матрицы

if(matrix[i][j]!=0)buttons[i][j].setText(""+matrix[i][j]);

else buttons[i][j].setText("");

}

status.setText("Старт новой игры");

gamePane.setVisible(true);

}

/**Класс адаптера прослушивающий события над кнопкой*/

class mAdapter extends java.awt.event.MouseAdapter

{

int posi,posj;

int startx=0;

int starty=0;

/**Конструктор адаптера в зависимости от позиции кнопочки*/

mAdapter(int posI,int posJ)

{

this.posi=posI;

this.posj=posJ;

}

/**При нажатой кнопке мыши*/

public void mousePressed(MouseEvent e)

{

//меняем курсор

buttons[posi][posj].setCursor(new Cursor(Cursor.MOVE_CURSOR));

//запоминаем точку начала переноса кнопки

startx=e.getX();

starty=e.getY();

}

/**При отпускании кнопки мыши*/

public void mouseReleased(MouseEvent e)

{

//меняем курсор

buttons[posi][posj].setCursor(new Cursor(Cursor.HAND_CURSOR));

//запоминаем точку окончания переноса кнопки

int endx=e.getX();

int endy=e.getY();

//определяем направление переноса

//если абсолютная величина (shiftx) больше

//абсолютной величины (shifty)

//значит передвигаемся по оси х

int shiftx=endx-startx;

int shifty=endy-starty;

if(Math.abs(shiftx)>Math.abs(shifty))

{

//определяем направление движения по оси х

if(shiftx>0)

{//вправо

 

//если это не крайние правые кнопки

//и правая кнопка пустая

//меняем местами кнопку с пустой кнопкой

if((posj!= 3) && (matrix[posi][posj+1] == 0))

{

matrix[posi][posj+1] = matrix[posi][posj];

matrix[posi][posj]=0;

buttons[posi][posj].setText("");

buttons[posi][posj+1].setText(""+matrix[posi][posj+1]);

status.setText("good turn");

}else status.setText("it is impossible");

}

else

{//влево

 

//если это не крайние левые кнопки

//и левая кнопка пустая

//меняем местами кнопку с пустой кнопкой

if((posj!= 0) && (matrix[posi][posj-1] == 0))

{

matrix[posi][posj-1] = matrix[posi][posj];

matrix[posi][posj]=0;

buttons[posi][posj].setText("");

buttons[posi][posj-1].setText(""+matrix[posi][posj-1]);

status.setText("good turn");

}else status.setText("it is impossible");

}

}

else

{

//определяем направление движения по оси y

if(shifty>0)

{//вниз

 

//если это не крайние нижние кнопки

//и нижняя кнопка пустая

//меняем местами кнопку с пустой кнопкой

if((posi!= 3) && (matrix[posi+1][posj] == 0))

{

matrix[posi+1][posj] = matrix[posi][posj];

matrix[posi][posj]=0;

buttons[posi][posj].setText("");

buttons[posi+1][posj].setText(""+matrix[posi+1][posj]);

status.setText("Хороший ход");

}else status.setText("Проигрыш");

}

else

{//вверх

 

//если это не крайние верхние кнопки

//и верхняя кнопка пустая

//меняем местами кнопку с пустой кнопкой

if((posi!= 0) && (matrix[posi-1][posj] == 0))

{

matrix[posi-1][posj] = matrix[posi][posj];

matrix[posi][posj]=0;

buttons[posi][posj].setText("");

buttons[posi-1][posj].setText(""+matrix[posi-1][posj]);

status.setText("good turn");

}else status.setText("it is impossible");

}

}

//проверяем все ли числа стоят на своих местах

//если да то победа!!!

int count=1;

int error=0;

for(int i = 0;i<4;i++)

for(int j = 0;j<4;j++)

{

if(matrix[i][j]!=count)error++;

count++;

}

if(error==1)

{

status.setText("Вы выиграли!!!");

int result = JOptionPane.showConfirmDialog(null,

"Вы выиграли!!!","Вы выиграли!!! Новая игра?",JOptionPane.YES_NO_OPTION);

if (result == JOptionPane.YES_OPTION)newGame();

else gamePane.setVisible(false);

}

}

}

}

 

АППЛЕТЫ


Дата добавления: 2015-10-29; просмотров: 159 | Нарушение авторских прав


Читайте в этой же книге: Библиотека классов Java - обзор | Рисуем прямоугольники и эллипсы | Передача данных в апплет | Создание нового приложения для CDC – профиль Foundation Profile |
<== предыдущая страница | следующая страница ==>
Менеджеры компоновок| Пишем первый апплет

mybiblioteka.su - 2015-2024 год. (0.032 сек.)