Simple single-color 8x8x8 LED Cube with AVRs
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

layerEditFrame.java 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import javax.swing.event.*;
  5. /**
  6. *
  7. * Beschreibung
  8. *
  9. * @version 1.0 vom 11/16/2011
  10. * @author
  11. */
  12. public class layerEditFrame extends JFrame {
  13. // Anfang Attribute
  14. private JPanel panelLED1 = new JPanel(null, true);
  15. JButton[][] ledPanels = new JButton[8][8];
  16. ImageIcon on = new ImageIcon(getClass().getResource("LEDon.png"));
  17. ImageIcon off = new ImageIcon(getClass().getResource("LEDoff.png"));
  18. byte[][] ledStatus = new byte[8][8];
  19. boolean changedStateSinceSave = false;
  20. byte[] frame;
  21. int li;
  22. boolean finish = false;
  23. cubeWorker worker = null;
  24. int animI;
  25. int frameI;
  26. // Ende Attribute
  27. public layerEditFrame(int animIndex, int frameIndex, int layerIndex, cubeWorker work) {
  28. // Frame-Initialisierung
  29. super("Layer Edit");
  30. worker = work;
  31. animI = animIndex;
  32. frameI = frameIndex;
  33. frame = worker.getFrame(animIndex, frameIndex);
  34. li = layerIndex;
  35. setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  36. int frameWidth = 180;
  37. int frameHeight = 230;
  38. setSize(frameWidth, frameHeight);
  39. Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  40. int x = (d.width - getSize().width) / 2;
  41. int y = (d.height - getSize().height) / 2;
  42. setLocation(x, y);
  43. setResizable(false);
  44. Container cp = getContentPane();
  45. cp.setLayout(null);
  46. for(int i = 0; i < 8; i++){
  47. for(int j = 0; j < 8; j++){
  48. final int finalI = i;
  49. final int finalJ = j;
  50. ledPanels[i][j] = new JButton(on);
  51. ledPanels[i][j].setBounds((i*20)+5, (j*20)+5, 15, 15);
  52. ledPanels[i][j].addActionListener(new ActionListener() {
  53. public void actionPerformed(ActionEvent evt) {
  54. btnClicked(finalI, finalJ);
  55. }
  56. });
  57. ledPanels[i][j].setVisible(true);
  58. cp.add(ledPanels[i][j]);
  59. }
  60. }
  61. loadData();
  62. JButton saveBtn = new JButton("Save");
  63. JButton cancelBtn = new JButton("Cancel");
  64. saveBtn.setBounds(5, 170, 70, 25);
  65. saveBtn.setFont(new Font("Dialog", Font.PLAIN, 13));
  66. cp.add(saveBtn);
  67. cancelBtn.setBounds(80, 170, 80, 25);
  68. cancelBtn.setFont(new Font("Dialog", Font.PLAIN, 13));
  69. cp.add(cancelBtn);
  70. setVisible(true);
  71. saveBtn.addActionListener(new ActionListener() {
  72. public void actionPerformed(ActionEvent evt) {
  73. save();
  74. }
  75. });
  76. cancelBtn.addActionListener(new ActionListener() {
  77. public void actionPerformed(ActionEvent evt) {
  78. cancel();
  79. }
  80. });
  81. addWindowListener(new WindowAdapter() {
  82. public void windowClosing(WindowEvent evt) {
  83. if(changedStateSinceSave){
  84. saveExitDialog();
  85. }
  86. dispose();
  87. }
  88. });
  89. }
  90. // Anfang Komponenten
  91. // Ende Komponenten
  92. private void loadData(){
  93. for(int i = 0; i < 8; i++){
  94. int div = frame[li + i];
  95. int[] rest = new int[8];
  96. int ctr = 0;
  97. while(div != 0){
  98. rest[ctr] = div%2;
  99. div = div/2;
  100. ctr++;
  101. }
  102. for(int j = 0; j < 8; j++){
  103. if(rest[j] == 0){
  104. ledPanels[li + j][i].setIcon(off);
  105. } else {
  106. ledPanels[li + j][i].setIcon(on);
  107. }
  108. ledStatus[li + j][i] = (byte) rest[j];
  109. }
  110. }
  111. }
  112. byte[] getFinalFrame(){
  113. if (finish == false) {
  114. return null;
  115. }
  116. return frame;
  117. }
  118. public void btnClicked(int i, int j){
  119. changedStateSinceSave = true;
  120. if (ledPanels[i][j].getIcon() == on){
  121. ledPanels[i][j].setIcon(off);
  122. ledStatus[i][j] = 0;
  123. } else {
  124. ledPanels[i][j].setIcon(on);
  125. ledStatus[i][j] = 1;
  126. }
  127. }
  128. public void cancel(){
  129. dispose();
  130. }
  131. public void save(){
  132. int ctr = 0;
  133. byte[] tmpFrame = new byte[64];
  134. changedStateSinceSave = false;
  135. int reihe = 0;
  136. for(int j = 0; j < 8; j++){
  137. for(int i = 0; i < 8; i++){
  138. reihe += ((int) Math.pow(2, i)) * ledStatus[i][j];
  139. ctr++;
  140. }
  141. tmpFrame[j] = (byte)reihe;
  142. reihe = 0;
  143. }
  144. frame = tmpFrame;
  145. dispose();
  146. worker.setFrame(frame, animI, frameI);
  147. }
  148. private int saveExitDialog() {
  149. String[] Optionen = {"Yes", "No"};
  150. int Auswahl = JOptionPane.showOptionDialog(this, "Do you want to save your changes?", "Save?", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, Optionen, Optionen[0]);
  151. if (Auswahl == JOptionPane.YES_OPTION) {
  152. save();
  153. return 1;
  154. } else {
  155. return 0;
  156. }
  157. }
  158. }