📄 rsframe.java
字号:
import java.awt.*;
import java.awt.event.*;
import RSAlgorithm;
import polynomial;
/**
* Reed-Solomon frame.
*
* An frame for coding/decoding Reed-Solomon codes.
*
* @author Benjamin Barras
* @version 1.10, 13/02/99
* @email benjamin.barras@epfl.ch * */
public class RSFrame extends Frame
implements WindowListener,ActionListener,AdjustmentListener,ItemListener
{
int m;
int indexInformation,indexError;
int indexHelp,indexPolynomial;
Button buttonRandom = new Button(" Random ");
Button buttonClear = new Button(" Clear ");
Button buttonBlank = new Button(" Blank ");
Button buttonQuit = new Button(" Quit ");
Label labelInformationSend = new Label("i=");
Label labelInformationReceive = new Label("I=");
Label labelCodeSend = new Label("c=");
Label labelCodeError = new Label("e=");
Label labelCodeReceive = new Label("d=");
Label labelEnter = new Label(" Press ENTER for validation");
Label labelErrorDetected = new Label(" Error detected : ");
Label labelX = new Label("x =");
TextField textFieldInformationSend = new TextField(5);
TextField textFieldInformationReceive = new TextField(5);
TextField textFieldCodeSend = new TextField(5);
TextField textFieldCodeError = new TextField(5);
TextField textFieldCodeReceive = new TextField(5);
TextField textFieldIndexLeft = new TextField(3);
TextField textFieldIndexRight = new TextField(3);
TextField textFieldErrorDetected = new TextField(20);
TextField textFieldX = new TextField(5);
Scrollbar scrollbarLeft;
Scrollbar scrollbarRight;
Choice choiceHelp = new Choice();
Choice choicePolynomial = new Choice();
TextArea blackboard = new TextArea();
RSAlgorithm rs;
public RSFrame(int n, int k, int t, int p)
{
int i;
String str = new String("");
rs = new RSAlgorithm(n,k,t,p);
indexInformation = 0;
indexError = 0;
m = n - (2 * t);
setFont(new Font("Helvetica",Font.PLAIN,14));
str = "Reed-Solomon Encoder/Decoder : GF(2^k) with";
str = str + " n = " + Integer.toString(n,10) + ",";
str = str + " k = " + Integer.toString(k,10) + ",";
str = str + " t = " + Integer.toString(t,10) + ".";
setTitle(str);
Panel row1 = new Panel();
Panel row2 = new Panel();
Panel row3 = new Panel();
Panel row4 = new Panel();
Panel row5 = new Panel();
Panel row31 = new Panel();
Panel row32 = new Panel();
Panel row41 = new Panel();
Panel row42 = new Panel();
buttonRandom.addActionListener(this);
buttonClear.addActionListener(this);
buttonBlank.addActionListener(this);
buttonQuit.addActionListener(this);
scrollbarLeft = new Scrollbar(Scrollbar.VERTICAL,indexInformation,1,0,m);
scrollbarLeft.addAdjustmentListener(this);
scrollbarRight = new Scrollbar(Scrollbar.VERTICAL,indexError,1,0,rs.n);
scrollbarRight.addAdjustmentListener(this);
textFieldInformationSend.addActionListener(this);
textFieldCodeError.addActionListener(this);
textFieldX.addActionListener(this);
textFieldIndexLeft.setEditable(false);
textFieldIndexRight.setEditable(false);
textFieldInformationSend.setEditable(true);
textFieldInformationReceive.setEditable(false);
textFieldCodeSend.setEditable(false);
textFieldCodeError.setEditable(true);
textFieldCodeReceive.setEditable(false);
textFieldErrorDetected.setEditable(false);
textFieldX.setEditable(true);
blackboard.setBackground(Color.white);
labelErrorDetected.setForeground(Color.black);
textFieldErrorDetected.setBackground(Color.white);
textFieldErrorDetected.setForeground(Color.red);
textFieldInformationReceive.setBackground(Color.gray);
textFieldCodeSend.setBackground(Color.gray);
textFieldCodeReceive.setBackground(Color.gray);
textFieldIndexLeft.setBackground(Color.gray);
textFieldIndexLeft.setForeground(Color.white);
textFieldIndexRight.setBackground(Color.gray);
textFieldIndexRight.setForeground(Color.white);
textFieldX.setBackground(Color.white);
choiceHelp.addItem("Help");
choiceHelp.addItem("Random");
choiceHelp.addItem("Clear");
choiceHelp.addItem("Blank");
choiceHelp.addItem("Quit");
choiceHelp.addItem("x = ");
choiceHelp.addItem("n");
choiceHelp.addItem("m");
choiceHelp.addItem("t");
choiceHelp.addItem("k");
choiceHelp.addItem("i");
choiceHelp.addItem("I");
choiceHelp.addItem("c");
choiceHelp.addItem("e");
choiceHelp.addItem("d");
choiceHelp.addItem("D");
choiceHelp.addItem("i(x)");
choiceHelp.addItem("I(x)");
choiceHelp.addItem("c(x)");
choiceHelp.addItem("e(x)");
choiceHelp.addItem("d(x)");
choiceHelp.addItem("D(x)");
choiceHelp.addItem("g(x)");
choiceHelp.addItem("s(x)");
choiceHelp.addItem("L(x)");
choiceHelp.addItem("W(x)");
choiceHelp.addItem("U(x)");
choiceHelp.addItem("p(x)");
choiceHelp.addItem("v(x)");
choiceHelp.addItemListener(this);
choicePolynomial.addItem("Polynomial");
choicePolynomial.addItem("i(x) = ");
choicePolynomial.addItem("I(x) = ");
choicePolynomial.addItem("c(x) = ");
choicePolynomial.addItem("e(x) = ");
choicePolynomial.addItem("d(x) = ");
choicePolynomial.addItem("D(x) = ");
choicePolynomial.addItem("g(x) = ");
choicePolynomial.addItem("s(x) = ");
choicePolynomial.addItem("L(x) = ");
choicePolynomial.addItem("W(x) = ");
choicePolynomial.addItem("U(x) = ");
choicePolynomial.addItem("p(x) = ");
choicePolynomial.addItem("v(x) = ");
choicePolynomial.addItemListener(this);
setLayout(new BorderLayout(5,5));
row1.setLayout(new FlowLayout(FlowLayout.CENTER,2,2));
row2.setLayout(new FlowLayout());
row3.setLayout(new GridLayout(2,1,10,10));
row4.setLayout(new GridLayout(2,1,10,10));
row5.setLayout(new FlowLayout());
row31.setLayout(new FlowLayout());
row32.setLayout(new FlowLayout());
row41.setLayout(new FlowLayout());
row42.setLayout(new FlowLayout());
row1.add(labelInformationSend);
row1.add(textFieldInformationSend);
row1.add(labelInformationReceive);
row1.add(textFieldInformationReceive);
row1.add(textFieldIndexLeft);
row1.add(scrollbarLeft);
row1.add(scrollbarRight);
row1.add(textFieldIndexRight);
row1.add(labelCodeSend);
row1.add(textFieldCodeSend);
row1.add(labelCodeError);
row1.add(textFieldCodeError);
row1.add(labelCodeReceive);
row1.add(textFieldCodeReceive);
row3.add(row31);
row3.add(row32);
row4.add(row41);
row4.add(row42);
row31.add(labelX);
row31.add(textFieldX);
row31.add(labelErrorDetected);
row31.add(textFieldErrorDetected);
row32.add(buttonRandom);
row32.add(buttonClear);
row32.add(buttonBlank);
row32.add(buttonQuit);
row41.add(choiceHelp);
row42.add(choicePolynomial);
rs.processing();
writeAllValue();
writeHelp();
writePolynomial();
add("North",row1);
add("Center",blackboard);
add("South",row3);
add("West",row4);
pack();
show();
}
public void writeAllValue()
{
int i;
String str;
i = rs.messageSend.coefficient[indexInformation];
str = Integer.toString(i,10);
textFieldInformationSend.setText(str);
i = rs.messageReceive.coefficient[indexInformation];
str = Integer.toString(i,10);
textFieldInformationReceive.setText(str);
str = Integer.toString(indexInformation,10);
textFieldIndexLeft.setText(str);
str = Integer.toString(indexError,10);
textFieldIndexRight.setText(str);
i = rs.codeSend.coefficient[indexError];
str = Integer.toString(i,10);
textFieldCodeSend.setText(str);
i = rs.codeError.coefficient[indexError];
str = Integer.toString(i,10);
textFieldCodeError.setText(str);
i = rs.codeReceive.coefficient[indexError];
str = Integer.toString(i,10);
textFieldCodeReceive.setText(str);
i = rs.errorNumber;
if (rs.failed) str = " > t (decoding failed)";
else str = Integer.toString(i,10);
textFieldErrorDetected.setText(str);
}
public void makeRandom()
{
int i,j,c,x;
double d,r;
j = indexInformation;
for (i = 0; i < j; i++)
{
r = Math.random();
d = (double) m;
x = (int) (r * d);
r = Math.random();
d = (double) rs.gf.q;
c = (int) (r * d);
rs.messageSend.coefficient[x] = c;
}
rs.messageSend.degree = rs.degree(rs.messageSend);
j = indexError;
for (i = 0; i < j; i++)
{
r = Math.random();
d = (double) rs.n;
x = (int) (r * d);
r = Math.random();
d = (double) rs.gf.q;
c = (int) (r * d);
rs.codeError.coefficient[x] = c;
}
rs.codeError.degree = rs.degree(rs.codeError);
}
public void writeHelp()
{
String str = new String("");
switch(indexHelp)
{
case 0 :
str = "";
break;
case 1 :
str = "--- Random Button ---";
blackboard.append(str + "\n");
str = "Use the index scroll bar for giving the cardinal of random number.";
blackboard.append(str + "\n");
str = "For example : The index number on the left equal 8 and the index number on the right equal 0.";
blackboard.append(str + "\n");
str = "If you press the Random button, you have 8 new random number for the data and no new random number for the code error.";
blackboard.append(str + "\n");
break;
case 2 :
str = "--- Clear Button ---";
blackboard.append(str + "\n");
str = "All polynomials are setting to zero.";
blackboard.append(str + "\n");
break;
case 3 :
str = "--- Blank Button ---";
blackboard.append(str + "\n");
str = "Clear the text area.";
blackboard.append(str + "\n");
break;
case 4 :
str = "--- Quit Button ---";
blackboard.append(str + "\n");
str = "Close the frame.";
blackboard.append(str + "\n");
break;
case 5 :
str = "--- x = ? ---";
blackboard.append(str + "\n");
str = "Evaluate the selected polynomial at the value given for x,";
blackboard.append(str + "\n");
str = "and evaluate the derivate of the selected polynomial at the value given for x.";
blackboard.append(str + "\n");
str = "Press ENTER for validate your value !";
blackboard.append(str + "\n");
break;
case 6 :
str = "--- What is n ? ---";
blackboard.append(str + "\n");
str = "n is the number of blocks for this code of Reed-Solomon.";
blackboard.append(str + "\n");
break;
case 7 :
str = "--- What is m ? ---";
blackboard.append(str + "\n");
str = "m is the number of blocks for the data information.";
blackboard.append(str + "\n");
str = "It is given by m = n - 2t.";
blackboard.append(str + "\n");
break;
case 8 :
str = "--- What is t ? ---";
blackboard.append(str + "\n");
str = "t is the maximum number of block errors authorised for this code.";
blackboard.append(str + "\n");
break;
case 9 :
str = "--- What is k ? ---";
blackboard.append(str + "\n");
str = "k is the number of bits for each block.";
blackboard.append(str + "\n");
break;
case 10 :
str = "--- What is i ? ---";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -