Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.awt.event.*;
- import java.awt.image.BufferedImage;
- import javax.swing.*;
- import javax.swing.border.EmptyBorder;
- import javax.swing.border.LineBorder;
- import java.util.*;
- public class GridTest extends JFrame implements ActionListener{
- private static ArrayList<Integer> primes;
- private static int maxPrime = 100;
- private static ArrayList<GridCell> gridCells;
- private static int currentIndex;
- private static JPanel gui;
- private static GridTest cb;
- private int size;
- private JButton[][] unitSquares;
- private JPanel xplusnSquare;
- private JLabel message;
- private static JFrame f = new JFrame("(x+n)(x+n)");;
- private boolean thingsSet = false;
- private JToolBar tools;
- public GridTest(int sizeSend) {
- int size = sizeSend;
- initializeVars(size);
- initializeGui();
- }
- public void initializeVars(int size){
- this.gui = new JPanel(new BorderLayout(0,0));
- this.size = size;
- this.unitSquares = new JButton[size][size];
- this.message = new JLabel(gridCells.get(currentIndex).print());
- }
- public static void initializeCells(){
- currentIndex = 0;
- primes = new ArrayList<Integer>();
- for(int i=3; i<maxPrime; i++){
- if(isPrime(i)){
- primes.add(i);
- }
- }
- gridCells = new ArrayList<GridCell>();
- for(int j=0; j<primes.size(); j++){
- for(int k=0; k<j; k++){
- if(primes.get(k) != primes.get(j)){
- GridCell testCell = new GridCell(primes.get(k), primes.get(j));
- if(testCell.oddxplusnsquared()){
- gridCells.add(testCell);
- }
- }
- }
- }
- }
- public void setGui(){
- if(thingsSet != true){
- gui.setBorder(new EmptyBorder(5, 5, 5, 5));
- gui.add(tools, BorderLayout.PAGE_START);
- }
- gui.add(xplusnSquare);
- }
- public final void initializeGui() {
- if(tools == null){
- tools = new JToolBar();
- tools.setFloatable(false);
- JButton changeButton = new JButton("Change");
- changeButton.setActionCommand("change");
- changeButton.addActionListener(this);
- tools.add(changeButton);
- tools.addSeparator();
- tools.add(message);
- }
- xplusnSquare = new JPanel(new GridBagLayout());
- xplusnSquare.setBorder(new LineBorder(Color.WHITE));
- Insets buttonMargin = new Insets(0,0,0,0);
- for (int ii = 0; ii < unitSquares.length; ii++) {
- for (int jj = 0; jj < unitSquares[ii].length; jj++) {
- JButton b = new JButton();
- int pixels = 650/size;
- b.setPreferredSize(new Dimension(pixels, pixels));
- ImageIcon icon = new ImageIcon(new BufferedImage(pixels, pixels, BufferedImage.TYPE_INT_ARGB));
- b.setIcon(icon);
- //if you're in the middle, make it black
- if(ii==((size-1)/2) && jj==((size-1)/2)){
- b.setBorder(BorderFactory.createMatteBorder(1,1,1,1, Color.black)); //diagonal left and down
- b.setBackground(Color.BLACK);
- } else {
- b.setBackground(Color.WHITE);
- }
- unitSquares[jj][ii] = b;
- GridBagConstraints c = new GridBagConstraints();
- c.gridx = ii;
- c.gridy = jj;
- /*
- * This is where I'm drawing the triangles. It's a whole bunch of code so it could probably be moved to
- * its own method but whatever.
- */
- if(gridCells.get(currentIndex).xplusn() == 3){
- //if it's three then the center will be black and the eight remaining squares will be the triangles
- //these don't need sophisticated border drawing to make triangles out of them
- b.setBorder(BorderFactory.createMatteBorder(1,1,1,1, Color.black)); //directly left of center
- } else {
- //drawing the triangles
- if(jj==((size-1)/2) && ii==(((size-1)/2)-1)){
- b.setBorder(BorderFactory.createMatteBorder(1,0,1,0, Color.black)); //directly left of center
- } else if(jj==((size-1)/2) && ii<(((size-1)/2)-1) && ii>0){
- b.setBorder(BorderFactory.createMatteBorder(1,0,0,0, Color.black)); //left of center to before left edge
- } else if(((((size-1)/2)-jj)+(((size-1)/2)-ii)==1) && jj>ii && ii>0){
- b.setBorder(BorderFactory.createMatteBorder(0,0,1,1, Color.black)); //diagonal left and down
- } else if(ii==(((size-1)/2)-1) && jj>((size-1)/2) && jj<size-1){
- b.setBorder(BorderFactory.createMatteBorder(0,0,0,1, Color.black)); //downwards directly left of center
- } else if(ii==0 && jj==((size-1)/2)){
- b.setBorder(BorderFactory.createMatteBorder(1,1,0,0, Color.black)); //left edge center corner
- } else if(ii==0 && jj>((size-1)/2) && jj<(size-2)){
- b.setBorder(BorderFactory.createMatteBorder(0,1,0,0, Color.black)); //left edge downwards from center
- } else if(ii==0 && jj==(size-2)){
- b.setBorder(BorderFactory.createMatteBorder(0,1,1,1, Color.black)); //left bottom corner of triangle (2nd last square)
- } else if(ii==0 && jj==(size-1)){
- b.setBorder(BorderFactory.createMatteBorder(0,1,1,0, Color.black)); //left bottom corner
- } else if(ii>0 && ii<(((size-1)/2)-1) && jj==(size-1)){
- b.setBorder(BorderFactory.createMatteBorder(0,0,1,0, Color.black)); //bottom edge before center
- } else if(ii==(((size-1)/2)-1) && jj==(size-1)){
- b.setBorder(BorderFactory.createMatteBorder(0,0,1,1, Color.black)); //bottom left inner corner before center
- } else if(jj==((size-1)/2) && ii==(((size-1)/2)+1)){
- b.setBorder(BorderFactory.createMatteBorder(1,0,1,0, Color.black)); //directly right of center
- } else if(jj==((size-1)/2) && ii>(((size-1)/2)-1) && ii<(size-1)){
- b.setBorder(BorderFactory.createMatteBorder(0,0,1,0, Color.black)); //right of center to before right edge
- } else if(((jj-((size-1)/2))+(ii-((size-1)/2))==1) && jj<ii && jj>0){
- if(ii==(size-1)){
- b.setBorder(BorderFactory.createMatteBorder(1,1,0,1, Color.black)); //diagonal right and up
- } else {
- b.setBorder(BorderFactory.createMatteBorder(1,1,0,0, Color.black)); //diagonal right and up
- }
- } else if(ii==(((size-1)/2)+1) && jj<((size-1)/2) && jj>0){
- b.setBorder(BorderFactory.createMatteBorder(0,1,0,0, Color.black)); //upwards directly right of center
- } else if(ii==(size-1) && jj==((size-1)/2)){
- b.setBorder(BorderFactory.createMatteBorder(0,0,1,1, Color.black)); //right edge center corner
- } else if(ii==(size-1) && jj<0 && jj>(size-2)){
- b.setBorder(BorderFactory.createMatteBorder(0,1,0,0, Color.black)); //right edge upwards from center
- } else if(jj==0 && ii>(((size-1)/2)+1) && ii<(size-1)){
- b.setBorder(BorderFactory.createMatteBorder(1,0,0,0, Color.black)); //top right
- } else if(ii==(size-1) && jj==0){
- b.setBorder(BorderFactory.createMatteBorder(1,0,0,1, Color.black)); //diagonal right and up
- } else if(ii==(((size-1)/2)+1) && jj==0){
- b.setBorder(BorderFactory.createMatteBorder(1,1,0,0, Color.black)); //diagonal right and up
- } else if(ii==(size-1) && jj>1 && jj<((size-1)/2)){
- b.setBorder(BorderFactory.createMatteBorder(0,0,0,1, Color.black)); //diagonal right and up
- } else if(jj==(((size-1)/2)+1) && ii==((size-1)/2)){
- b.setBorder(BorderFactory.createMatteBorder(0,0,0,1, Color.black)); //directly below center
- } else if(jj==(size-1) && ii>=((size-1)/2) && ii<(size-2)){
- b.setBorder(BorderFactory.createMatteBorder(0,0,1,0, Color.black)); //bottom below center
- } else if(jj==(size-1) && ii==(size-2)){
- b.setBorder(BorderFactory.createMatteBorder(1,0,1,1, Color.black)); //directly below center
- } else if(ii-jj==-1 && ii>((size-1)/2) && jj>((size-1)/2)){
- b.setBorder(BorderFactory.createMatteBorder(1,0,0,1, Color.black)); //diagonal right and down
- } else if(jj==(size-1) && ii==(size-1)){
- b.setBorder(BorderFactory.createMatteBorder(0,0,1,1, Color.black)); //bottom right corner
- } else if(jj>((size-1)/2) && jj<(size-1) && ii==(size-1)){
- b.setBorder(BorderFactory.createMatteBorder(0,0,0,1, Color.black)); //right edge downwards
- } else if(jj==0 && ii==0){
- b.setBorder(BorderFactory.createMatteBorder(1,1,0,1, Color.black)); //top corner
- } else if(ii==0 && jj>0 && jj<((size-1)/2)){
- b.setBorder(BorderFactory.createMatteBorder(0,1,0,0, Color.black)); //left top side edge
- } else if(jj==0 && ii>0 && ii<(((size-1)/2)+1)){
- b.setBorder(BorderFactory.createMatteBorder(1,0,0,0, Color.black)); //left top top edge
- } else if(ii==jj && ii>0 && ii<((size-1)/2) && jj>0 && jj<((size-1)/2)){
- b.setBorder(BorderFactory.createMatteBorder(1,0,0,1, Color.black)); //directly below center
- } else {
- b.setBorder(BorderFactory.createMatteBorder(0,0,0,0, Color.black)); //inner parts blank
- }
- }
- xplusnSquare.add(unitSquares[jj][ii], c);
- }
- }
- setGui();
- }
- public void actionPerformed(ActionEvent e) {
- if ("change".equals(e.getActionCommand())) {
- initializeVars(13);
- initializeGui();
- startThing();
- }
- }
- public static boolean isPrime(int n){
- if(n==1 || n==2 || n==4){
- return false;
- }
- for(int i=2; i<n; i++){
- if(n%i==0){
- return false;
- }
- }
- return true;
- }
- public JComponent getGui(){
- return gui;
- }
- public static void main(String[] args) {
- Runnable r = new Runnable() {
- @Override
- public void run() {
- startThing();
- }
- };
- SwingUtilities.invokeLater(r);
- }
- public static void startThing(){
- if(cb != null){ //if you're changing the triangles
- currentIndex++;
- if(currentIndex == gridCells.size()){
- currentIndex = 0;
- }
- cb = new GridTest(gridCells.get(currentIndex).xplusn());
- f.getContentPane().removeAll();
- f.add(cb.getGui());
- f.setMinimumSize(f.getSize());
- f.pack();
- f.setSize(725,725);
- } else { //initial triangles
- initializeCells();
- gui = null;
- cb = new GridTest(gridCells.get(currentIndex).xplusn());
- f.add(cb.getGui());
- f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
- f.setLocationByPlatform(true);
- f.pack();
- f.setSize(725,725);
- f.setMinimumSize(f.getSize());
- f.setVisible(true);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment