Листинг 6. Matrix.java - умножение матрицы на вектор
---------------------------------------------------------------
// Импортируем необходимые пакеты классов
import java.awt.*; //эл. граф. интерфейса
import java.applet.*; //поддержка апплета
import java.awt.event.*; //обработчик событий
// Создаем класс Matrix, расширяющий класс Applet
public class Matrix extends Applet
implements ActionListener {
TextField tN, tM, A[][], B[], C[];
Button bShow, bCalc; //Кнопки, генерирующие сообщение
Color bgApplet, bgAB, bgC;
int n, m;
// Метод инициализации апплета
public void init() {
// Устанавливаем цвета для рисования граф. примитивов
bgApplet = new Color(6, 159, 242);
bgAB = new Color(21, 208, 223);
bgC = new Color(234, 159, 21);
// Устанавливаем цвет фона апплета
setBackground(bgApplet);
// Устанавливаем абс. позиционирование
// компонентов внутри апплета
setLayout(null);
// Создаем метку N, устанавливаем ее расположение
// и добавляем в апплет
Label lN = new Label("N:");
lN.setBounds(10, 10, 20, 20);
add(lN);
tN = new TextField(); //создаем поле для ввода текста
tN.setBounds(40, 10, 40, 20); //указываем расположение
tN.setBackground(bgAB); //задаем цвет фона поля
add(tN); // добавляем поле в апплет
// Создаем метку М, границы метки и добавляем ее в апплет
Label lM = new Label("M:");
lM.setBounds(90, 10, 20, 20);
add(lM);
// Создание, определение границ, цвета поля для М и
// добавление текстового поля в апплет
tM = new TextField();
tM.setBounds(120, 10, 40, 20);
tM.setBackground(bgAB);
add(tM);
// Создаем кнопкe Show
bShow = new Button("Show");
bShow.setBounds(170, 10, 50, 20);
add(bShow);
// Создаем кнопкe Calculate
bCalc = new Button("Calculate");
bCalc.setBounds(230, 10, 50, 20);
add(bCalc);
// Регистрируем для кнопок "прослушивание" событий
bShow.addActionListener(this);
bCalc.addActionListener(this);
n = 0; m = 0;
}
// Метод вывода графики в апплет
public void paint(Graphics g){}
// Метод реакции на нажатия кнопок Show и Calculate
public void actionPerformed(ActionEvent ae){
String str = ae.getActionCommand();
if(str.equals("Show"))
{int newn = Integer.parseInt(tN.getText());
int newm = Integer.parseInt(tM.getText());
if(newm > 6)
{ newm = 6;
tM.setText(String.valueOf(6));
}
if(newm != m || newn != n)
{
// Чистка полей для ввода текста матрицы А и вектора С
for(int i=0; i<n; i++)
{ for(int j=0; j<m; j++)
remove(A[i][j]);
remove(C[i]);
}
for(int i=0; i<m; i++)
remove(B[i]); //чистка полей для вектора В
m = newm;
n = newn;
A = new TextField[n][m];
B = new TextField[m];
C = new TextField[n];
// Заполнение матрицы А, вектора С текстовыми "1"
for(int i=0; i<n ;i++)
{ for(int j=0; j<m; j++){
A[i][j] = new TextField("1");
A[i][j].setBounds(10+j*35,40+i*25,30,20);
A[i][j].setBackground(bgAB);
add(A[i][j]); }
C[i] = new TextField(tM.getText());
C[i].setBounds(155+m*35,40+i*25,90,20);
C[i].setEditable(false);
C[i].setBackground(bgC);
add(C[i]);
}
for(int i=0; i<m; i++)
{ B[i] = new TextField("1");
B[i].setBounds(65+m*35, 40+i*25, 30, 20);
B[i].setBackground(bgAB);
add(B[i]);
}
}
}
if(str.equals("Calculate"))
{ for(int i=0; i<n; i++)
{ double e = 0;
for(int j=0; j<m; j++)
e+=Double.parseDouble(A[i][j].getText())*
Double.parseDouble(B[j].getText());
C[i].setText(String.valueOf(e));
}
}
}
}
Листинг Matrix.html
----------------------------------------------------------------
<!-- Файл Matrix.html >
<!-- Умножение матрицы на вектор >
<HTML> <BODY BGCOLOR="#069FF2">
<APPLET CODE="matrix.class" WIDTH=700
HEIGHT=500 HALIGN="CENTER"></APPLET>
</BODY> </HTML>
Результатом работы программы будет:
