Guest User

Triangle visualization for Java

a guest
Oct 14th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.22 KB | None | 0 0
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.awt.image.BufferedImage;
  4.  
  5. import javax.swing.*;
  6. import javax.swing.border.EmptyBorder;
  7. import javax.swing.border.LineBorder;
  8.  
  9. import java.util.*;
  10.  
  11. public class GridTest extends JFrame implements ActionListener{
  12.  
  13. private static ArrayList<Integer> primes;
  14. private static int maxPrime = 100;
  15. private static ArrayList<GridCell> gridCells;
  16. private static int currentIndex;
  17. private static JPanel gui;
  18. private static GridTest cb;
  19. private int size;
  20. private JButton[][] unitSquares;
  21. private JPanel xplusnSquare;
  22. private JLabel message;
  23. private static JFrame f = new JFrame("(x+n)(x+n)");;
  24. private boolean thingsSet = false;
  25. private JToolBar tools;
  26.  
  27. public GridTest(int sizeSend) {
  28. int size = sizeSend;
  29. initializeVars(size);
  30. initializeGui();
  31. }
  32.  
  33. public void initializeVars(int size){
  34. this.gui = new JPanel(new BorderLayout(0,0));
  35. this.size = size;
  36. this.unitSquares = new JButton[size][size];
  37. this.message = new JLabel(gridCells.get(currentIndex).print());
  38. }
  39.  
  40. public static void initializeCells(){
  41. currentIndex = 0;
  42. primes = new ArrayList<Integer>();
  43. for(int i=3; i<maxPrime; i++){
  44. if(isPrime(i)){
  45. primes.add(i);
  46. }
  47. }
  48. gridCells = new ArrayList<GridCell>();
  49. for(int j=0; j<primes.size(); j++){
  50. for(int k=0; k<j; k++){
  51. if(primes.get(k) != primes.get(j)){
  52. GridCell testCell = new GridCell(primes.get(k), primes.get(j));
  53. if(testCell.oddxplusnsquared()){
  54. gridCells.add(testCell);
  55. }
  56. }
  57. }
  58. }
  59. }
  60.  
  61. public void setGui(){
  62. if(thingsSet != true){
  63. gui.setBorder(new EmptyBorder(5, 5, 5, 5));
  64. gui.add(tools, BorderLayout.PAGE_START);
  65. }
  66. gui.add(xplusnSquare);
  67. }
  68.  
  69. public final void initializeGui() {
  70. if(tools == null){
  71. tools = new JToolBar();
  72. tools.setFloatable(false);
  73. JButton changeButton = new JButton("Change");
  74. changeButton.setActionCommand("change");
  75. changeButton.addActionListener(this);
  76. tools.add(changeButton);
  77. tools.addSeparator();
  78. tools.add(message);
  79. }
  80.  
  81. xplusnSquare = new JPanel(new GridBagLayout());
  82. xplusnSquare.setBorder(new LineBorder(Color.WHITE));
  83.  
  84. Insets buttonMargin = new Insets(0,0,0,0);
  85. for (int ii = 0; ii < unitSquares.length; ii++) {
  86. for (int jj = 0; jj < unitSquares[ii].length; jj++) {
  87. JButton b = new JButton();
  88. int pixels = 650/size;
  89. b.setPreferredSize(new Dimension(pixels, pixels));
  90.  
  91. ImageIcon icon = new ImageIcon(new BufferedImage(pixels, pixels, BufferedImage.TYPE_INT_ARGB));
  92. b.setIcon(icon);
  93.  
  94. //if you're in the middle, make it black
  95. if(ii==((size-1)/2) && jj==((size-1)/2)){
  96. b.setBorder(BorderFactory.createMatteBorder(1,1,1,1, Color.black)); //diagonal left and down
  97. b.setBackground(Color.BLACK);
  98. } else {
  99. b.setBackground(Color.WHITE);
  100. }
  101. unitSquares[jj][ii] = b;
  102. GridBagConstraints c = new GridBagConstraints();
  103. c.gridx = ii;
  104. c.gridy = jj;
  105.  
  106.  
  107. /*
  108. * This is where I'm drawing the triangles. It's a whole bunch of code so it could probably be moved to
  109. * its own method but whatever.
  110. */
  111.  
  112.  
  113. if(gridCells.get(currentIndex).xplusn() == 3){
  114. //if it's three then the center will be black and the eight remaining squares will be the triangles
  115. //these don't need sophisticated border drawing to make triangles out of them
  116. b.setBorder(BorderFactory.createMatteBorder(1,1,1,1, Color.black)); //directly left of center
  117. } else {
  118.  
  119. //drawing the triangles
  120. if(jj==((size-1)/2) && ii==(((size-1)/2)-1)){
  121. b.setBorder(BorderFactory.createMatteBorder(1,0,1,0, Color.black)); //directly left of center
  122. } else if(jj==((size-1)/2) && ii<(((size-1)/2)-1) && ii>0){
  123. b.setBorder(BorderFactory.createMatteBorder(1,0,0,0, Color.black)); //left of center to before left edge
  124. } else if(((((size-1)/2)-jj)+(((size-1)/2)-ii)==1) && jj>ii && ii>0){
  125. b.setBorder(BorderFactory.createMatteBorder(0,0,1,1, Color.black)); //diagonal left and down
  126. } else if(ii==(((size-1)/2)-1) && jj>((size-1)/2) && jj<size-1){
  127. b.setBorder(BorderFactory.createMatteBorder(0,0,0,1, Color.black)); //downwards directly left of center
  128. } else if(ii==0 && jj==((size-1)/2)){
  129. b.setBorder(BorderFactory.createMatteBorder(1,1,0,0, Color.black)); //left edge center corner
  130. } else if(ii==0 && jj>((size-1)/2) && jj<(size-2)){
  131. b.setBorder(BorderFactory.createMatteBorder(0,1,0,0, Color.black)); //left edge downwards from center
  132. } else if(ii==0 && jj==(size-2)){
  133. b.setBorder(BorderFactory.createMatteBorder(0,1,1,1, Color.black)); //left bottom corner of triangle (2nd last square)
  134. } else if(ii==0 && jj==(size-1)){
  135. b.setBorder(BorderFactory.createMatteBorder(0,1,1,0, Color.black)); //left bottom corner
  136. } else if(ii>0 && ii<(((size-1)/2)-1) && jj==(size-1)){
  137. b.setBorder(BorderFactory.createMatteBorder(0,0,1,0, Color.black)); //bottom edge before center
  138. } else if(ii==(((size-1)/2)-1) && jj==(size-1)){
  139. b.setBorder(BorderFactory.createMatteBorder(0,0,1,1, Color.black)); //bottom left inner corner before center
  140.  
  141.  
  142. } else if(jj==((size-1)/2) && ii==(((size-1)/2)+1)){
  143. b.setBorder(BorderFactory.createMatteBorder(1,0,1,0, Color.black)); //directly right of center
  144. } else if(jj==((size-1)/2) && ii>(((size-1)/2)-1) && ii<(size-1)){
  145. b.setBorder(BorderFactory.createMatteBorder(0,0,1,0, Color.black)); //right of center to before right edge
  146. } else if(((jj-((size-1)/2))+(ii-((size-1)/2))==1) && jj<ii && jj>0){
  147. if(ii==(size-1)){
  148. b.setBorder(BorderFactory.createMatteBorder(1,1,0,1, Color.black)); //diagonal right and up
  149. } else {
  150. b.setBorder(BorderFactory.createMatteBorder(1,1,0,0, Color.black)); //diagonal right and up
  151. }
  152. } else if(ii==(((size-1)/2)+1) && jj<((size-1)/2) && jj>0){
  153. b.setBorder(BorderFactory.createMatteBorder(0,1,0,0, Color.black)); //upwards directly right of center
  154. } else if(ii==(size-1) && jj==((size-1)/2)){
  155. b.setBorder(BorderFactory.createMatteBorder(0,0,1,1, Color.black)); //right edge center corner
  156. } else if(ii==(size-1) && jj<0 && jj>(size-2)){
  157. b.setBorder(BorderFactory.createMatteBorder(0,1,0,0, Color.black)); //right edge upwards from center
  158. } else if(jj==0 && ii>(((size-1)/2)+1) && ii<(size-1)){
  159. b.setBorder(BorderFactory.createMatteBorder(1,0,0,0, Color.black)); //top right
  160. } else if(ii==(size-1) && jj==0){
  161. b.setBorder(BorderFactory.createMatteBorder(1,0,0,1, Color.black)); //diagonal right and up
  162. } else if(ii==(((size-1)/2)+1) && jj==0){
  163. b.setBorder(BorderFactory.createMatteBorder(1,1,0,0, Color.black)); //diagonal right and up
  164. } else if(ii==(size-1) && jj>1 && jj<((size-1)/2)){
  165. b.setBorder(BorderFactory.createMatteBorder(0,0,0,1, Color.black)); //diagonal right and up
  166.  
  167.  
  168. } else if(jj==(((size-1)/2)+1) && ii==((size-1)/2)){
  169. b.setBorder(BorderFactory.createMatteBorder(0,0,0,1, Color.black)); //directly below center
  170. } else if(jj==(size-1) && ii>=((size-1)/2) && ii<(size-2)){
  171. b.setBorder(BorderFactory.createMatteBorder(0,0,1,0, Color.black)); //bottom below center
  172. } else if(jj==(size-1) && ii==(size-2)){
  173. b.setBorder(BorderFactory.createMatteBorder(1,0,1,1, Color.black)); //directly below center
  174. } else if(ii-jj==-1 && ii>((size-1)/2) && jj>((size-1)/2)){
  175. b.setBorder(BorderFactory.createMatteBorder(1,0,0,1, Color.black)); //diagonal right and down
  176. } else if(jj==(size-1) && ii==(size-1)){
  177. b.setBorder(BorderFactory.createMatteBorder(0,0,1,1, Color.black)); //bottom right corner
  178. } else if(jj>((size-1)/2) && jj<(size-1) && ii==(size-1)){
  179. b.setBorder(BorderFactory.createMatteBorder(0,0,0,1, Color.black)); //right edge downwards
  180.  
  181.  
  182. } else if(jj==0 && ii==0){
  183. b.setBorder(BorderFactory.createMatteBorder(1,1,0,1, Color.black)); //top corner
  184. } else if(ii==0 && jj>0 && jj<((size-1)/2)){
  185. b.setBorder(BorderFactory.createMatteBorder(0,1,0,0, Color.black)); //left top side edge
  186. } else if(jj==0 && ii>0 && ii<(((size-1)/2)+1)){
  187. b.setBorder(BorderFactory.createMatteBorder(1,0,0,0, Color.black)); //left top top edge
  188. } else if(ii==jj && ii>0 && ii<((size-1)/2) && jj>0 && jj<((size-1)/2)){
  189. b.setBorder(BorderFactory.createMatteBorder(1,0,0,1, Color.black)); //directly below center
  190.  
  191.  
  192. } else {
  193. b.setBorder(BorderFactory.createMatteBorder(0,0,0,0, Color.black)); //inner parts blank
  194. }
  195.  
  196. }
  197.  
  198. xplusnSquare.add(unitSquares[jj][ii], c);
  199. }
  200. }
  201. setGui();
  202. }
  203.  
  204. public void actionPerformed(ActionEvent e) {
  205. if ("change".equals(e.getActionCommand())) {
  206. initializeVars(13);
  207. initializeGui();
  208. startThing();
  209. }
  210. }
  211.  
  212. public static boolean isPrime(int n){
  213. if(n==1 || n==2 || n==4){
  214. return false;
  215. }
  216. for(int i=2; i<n; i++){
  217. if(n%i==0){
  218. return false;
  219. }
  220. }
  221. return true;
  222. }
  223.  
  224. public JComponent getGui(){
  225. return gui;
  226. }
  227.  
  228. public static void main(String[] args) {
  229. Runnable r = new Runnable() {
  230.  
  231. @Override
  232. public void run() {
  233. startThing();
  234. }
  235. };
  236. SwingUtilities.invokeLater(r);
  237. }
  238.  
  239. public static void startThing(){
  240. if(cb != null){ //if you're changing the triangles
  241. currentIndex++;
  242. if(currentIndex == gridCells.size()){
  243. currentIndex = 0;
  244. }
  245. cb = new GridTest(gridCells.get(currentIndex).xplusn());
  246. f.getContentPane().removeAll();
  247. f.add(cb.getGui());
  248. f.setMinimumSize(f.getSize());
  249. f.pack();
  250. f.setSize(725,725);
  251. } else { //initial triangles
  252. initializeCells();
  253. gui = null;
  254. cb = new GridTest(gridCells.get(currentIndex).xplusn());
  255. f.add(cb.getGui());
  256. f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  257. f.setLocationByPlatform(true);
  258. f.pack();
  259. f.setSize(725,725);
  260. f.setMinimumSize(f.getSize());
  261. f.setVisible(true);
  262. }
  263. }
  264. }
Advertisement
Add Comment
Please, Sign In to add comment