import javax.swing.*;
 public class Matriks extends JFrame{
  
  public Matriks(){
   fieldMatriks=new JTextField[12][12];
   initComponents();
   for(int i=0;i<12;i++){
    for(int j=0;j<12;j++){
     fieldMatriks[i][j]=new JTextField();
     fieldMatriks[i][j].setEnabled(false);
     panelMatriks.add(fieldMatriks[i][j]);
    }
   }
   fieldMatriks[0][0].setEnabled(true);
  }
  private JTextField fieldMatriks[][];
  private void initComponents(){
   buttonGroup1=new javax.swing.ButtonGroup();
   comboDimensi=new javax.swing.JComboBox();
   jLabel1=new javax.swing.JLabel();
   buttonPrint=new javax.swing.JButton();
   jPanel1=new javax.swing.JPanel();
   radioInverse=new javax.swing.JRadioButton();
   radioDeterminan=new javax.swing.JRadioButton();
   radioTranspose=new javax.swing.JRadioButton();
   panelMatriks=new javax.swing.JPanel();
   jPanel3=new javax.swing.JPanel();
   jLabel2=new javax.swing.JLabel();
   jLabel3=new javax.swing.JLabel();
   jLabel5=new javax.swing.JLabel();
   jLabel4=new javax.swing.JLabel();
   jLabel9=new javax.swing.JLabel();
   jLabel8=new javax.swing.JLabel();
   jLabel7=new javax.swing.JLabel();
   jLabel6=new javax.swing.JLabel();
   jLabel11=new javax.swing.JLabel();
   jLabel10=new javax.swing.JLabel();
   jLabel12=new javax.swing.JLabel();
   jLabel13=new javax.swing.JLabel();
   jPanel2=new javax.swing.JPanel();
   jScrollPane1=new javax.swing.JScrollPane();
   areaOutput=new javax.swing.JTextArea();
   setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
   
   comboDimensi.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"1","2","3","4","5","6","7","8","9","10","11","12"}));
   comboDimensi.addActionListener(new java.awt.event.ActionListener(){
    public void actionPerformed(java.awt.event.ActionEvent evt){
     comboDimensiActionPerformed(evt);
    }
   });
   jLabel1.setText("Dimensi Matriks");
   buttonPrint.setText("Running");
   buttonPrint.addActionListener(new java.awt.event.ActionListener(){
    public void actionPerformed(java.awt.event.ActionEvent evt){
     buttonPrintActionPerformed(evt);
    }
   });
   
   jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Operasi Hitung"));
   buttonGroup1.add(radioInverse);
   radioInverse.setSelected(true);
   radioInverse.setText("Inverse");
   buttonGroup1.add(radioDeterminan);
   radioDeterminan.setText("Determinan");
   buttonGroup1.add(radioTranspose);
   radioTranspose.setText("Transpose");
   javax.swing.GroupLayout jPanel1Layout=new javax.swing.GroupLayout(jPanel1);
   jPanel1.setLayout(jPanel1Layout);
   jPanel1Layout.setHorizontalGroup(
    jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
     .addGroup(jPanel1Layout.createSequentialGroup()
      .addContainerGap()
       .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(radioInverse)
         .addComponent(radioDeterminan)
          .addComponent(radioTranspose))
           .addContainerGap(16,Short.MAX_VALUE))
   );
   jPanel1Layout.setVerticalGroup(
    jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
     .addGroup(jPanel1Layout.createSequentialGroup()
      .addContainerGap()
       .addComponent(radioInverse)
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
         .addComponent(radioDeterminan)
          .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
           .addComponent(radioTranspose)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE))
   );
   
   panelMatriks.setLayout(new java.awt.GridLayout(12, 12));
   jLabel2.setText("   X1");
   jLabel3.setText("X2");
   jLabel5.setText("X3");
   jLabel4.setText("X4");
   jLabel9.setText("X5");
   jLabel8.setText("X6");
   jLabel7.setText("X7");
   jLabel6.setText("X8");
   jLabel11.setText("x9");
   jLabel10.setText("X10");
   jLabel12.setText("X11");
   jLabel13.setText("X12");
   javax.swing.GroupLayout jPanel3Layout=new javax.swing.GroupLayout(jPanel3);
   jPanel3.setLayout(jPanel3Layout);
   jPanel3Layout.setHorizontalGroup(
    jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
     .addGroup(jPanel3Layout.createSequentialGroup()
      .addComponent(jLabel2,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE)
       .addComponent(jLabel3,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE)
        .addComponent(jLabel5,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE)
         .addComponent(jLabel4,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE)
          .addComponent(jLabel9,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE)
           .addComponent(jLabel8,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(jLabel7,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE)
             .addComponent(jLabel6,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE)
              .addComponent(jLabel11,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE)
               .addComponent(jLabel10,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jLabel12,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addComponent(jLabel13,javax.swing.GroupLayout.PREFERRED_SIZE,29,javax.swing.GroupLayout.PREFERRED_SIZE))
   );
   jPanel3Layout.setVerticalGroup(
    jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
     .addComponent(jLabel2,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
      .addComponent(jLabel3,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
       .addComponent(jLabel5,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
        .addComponent(jLabel4,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
         .addComponent(jLabel9,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
          .addComponent(jLabel8,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
           .addComponent(jLabel7,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(jLabel6,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
             .addComponent(jLabel11,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
              .addComponent(jLabel10,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
               .addComponent(jLabel12,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jLabel13,javax.swing.GroupLayout.PREFERRED_SIZE,34,javax.swing.GroupLayout.PREFERRED_SIZE)
   );
   
   jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Output"));
   areaOutput.setColumns(20);
   areaOutput.setRows(5);
   jScrollPane1.setViewportView(areaOutput);
   javax.swing.GroupLayout jPanel2Layout=new javax.swing.GroupLayout(jPanel2);
   jPanel2.setLayout(jPanel2Layout);
   jPanel2Layout.setHorizontalGroup(
    jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
     .addGroup(jPanel2Layout.createSequentialGroup()
      .addContainerGap()
       .addComponent(jScrollPane1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
        .addContainerGap(280,Short.MAX_VALUE))
   );
   jPanel2Layout.setVerticalGroup(
    jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
     .addGroup(jPanel2Layout.createSequentialGroup()
      .addComponent(jScrollPane1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE))
   );
   javax.swing.GroupLayout layout=new javax.swing.GroupLayout(getContentPane());
   getContentPane().setLayout(layout);
   layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
      .addContainerGap()
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
        .addComponent(jPanel2,javax.swing.GroupLayout.Alignment.LEADING,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)
         .addGroup(layout.createSequentialGroup()
          .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
           .addComponent(buttonPrint)
            .addComponent(jPanel1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
             .addComponent(jLabel1)
              .addComponent(comboDimensi,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE))
               .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                 .addComponent(jPanel3,javax.swing.GroupLayout.DEFAULT_SIZE,347,Short.MAX_VALUE)
                  .addComponent(panelMatriks,javax.swing.GroupLayout.DEFAULT_SIZE,347,Short.MAX_VALUE))))
                   .addContainerGap())
   );
   layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
     .addGroup(layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
       .addGroup(layout.createSequentialGroup()
        .addGap(37,37,37)
         .addComponent(jLabel1)
          .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
           .addComponent(comboDimensi,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
             .addComponent(jPanel1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
               .addComponent(buttonPrint))
                .addGroup(layout.createSequentialGroup()
                 .addGap(25,25,25)
                  .addComponent(jPanel3,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
                   .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(panelMatriks,javax.swing.GroupLayout.PREFERRED_SIZE,285,javax.swing.GroupLayout.PREFERRED_SIZE)))
                     .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                      .addComponent(jPanel2,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)
                       .addContainerGap())
   );
   pack();
  }                        
  
  private void buttonPrintActionPerformed(java.awt.event.ActionEvent evt){                                            
   if(radioInverse.isSelected()){
    JOptionPane.showMessageDialog(this, "Belum Bisa");
   }else if(radioDeterminan.isSelected()){
    int jumlahOrdo=Integer.parseInt(String.valueOf(comboDimensi.getItemAt(comboDimensi.getSelectedIndex())));
    int input[][]=new int[jumlahOrdo][jumlahOrdo];
    for(int i=0;i<jumlahOrdo;i++){
     for(int j=0;j<jumlahOrdo;j++){
      input[i][j] = Integer.parseInt(fieldMatriks[i][j].getText());
     }
    }
    int hasil=determinanMatriks(input);
    areaOutput.setText(String.valueOf(hasil));
   }else if(radioTranspose.isSelected()){
    areaOutput.setText("");
    int jumlahOrdo=Integer.parseInt(String.valueOf(comboDimensi.getItemAt(comboDimensi.getSelectedIndex())));
    int input[][]=new int[jumlahOrdo][jumlahOrdo];
    for(int i=0;i<jumlahOrdo;i++){
     for(int j=0;j<jumlahOrdo;j++){
      input[i][j]=Integer.parseInt(fieldMatriks[i][j].getText());
     }
    }
    int hasil[][]=transposeMatriks(input);
    for(int i=0;i<hasil.length;i++){
     for(int j=0;j<hasil[i].length;j++){
      areaOutput.append(hasil[i][j]+"\t");
     }
     areaOutput.append("\n");
    }
   }
  }                                           
  
  private void comboDimensiActionPerformed(java.awt.event.ActionEvent evt){                                             
   int jumlahOrdo=Integer.parseInt(String.valueOf(comboDimensi.getItemAt(comboDimensi.getSelectedIndex())));
   for(int i=0;i<jumlahOrdo;i++){
    for(int j=0;j<jumlahOrdo;j++){
     fieldMatriks[i][j].setEnabled(true);
    }
   }
   for(int i=0;i<12;i++){
    for(int j=jumlahOrdo;j<12;j++){
     fieldMatriks[i][j].setEnabled(false);
    }
   }
   for(int i=jumlahOrdo;i<12;i++){
    for(int j=0;j<12;j++){
     fieldMatriks[i][j].setEnabled(false);
    }
   }
  }                                            
  
  public static void main(String args[]){
   java.awt.EventQueue.invokeLater(new Runnable(){
    public void run(){
     new Matriks().setVisible(true);
    }
   });
  }
  
  private javax.swing.JTextArea areaOutput;
  private javax.swing.ButtonGroup buttonGroup1;
  private javax.swing.JButton buttonPrint;
  private javax.swing.JComboBox comboDimensi;
  private javax.swing.JLabel jLabel1;
  private javax.swing.JLabel jLabel10;
  private javax.swing.JLabel jLabel11;
  private javax.swing.JLabel jLabel12;
  private javax.swing.JLabel jLabel13;
  private javax.swing.JLabel jLabel2;
  private javax.swing.JLabel jLabel3;
  private javax.swing.JLabel jLabel4;
  private javax.swing.JLabel jLabel5;
  private javax.swing.JLabel jLabel6;
  private javax.swing.JLabel jLabel7;
  private javax.swing.JLabel jLabel8;
  private javax.swing.JLabel jLabel9;
  private javax.swing.JPanel jPanel1;
  private javax.swing.JPanel jPanel2;
  private javax.swing.JPanel jPanel3;
  private javax.swing.JScrollPane jScrollPane1;
  private javax.swing.JPanel panelMatriks;
  private javax.swing.JRadioButton radioDeterminan;
  private javax.swing.JRadioButton radioInverse;
  private javax.swing.JRadioButton radioTranspose;
  
  private int[][]transposeMatriks(int[][]a){
   int hasil[][]=new int[a.length][a[0].length];
   for(int i=0;i<a.length;i++){
    for(int j=0;j<a[i].length;j++){
     hasil[j][i]=a[i][j];
    }
   }
   return hasil;
  }
  
  private int determinanMatriks(int[][]a){
   int hasil=0;
   int sarrus[][];
   if(a.length==2){
    sarrus=a;
    int temp=1;
    for(int i=0;i<sarrus.length;i++){
     for(int j=0;j<sarrus[i].length;j++){
      System.out.print(sarrus[i][j]+" ");
     }
     System.out.println("");
    }
    temp=sarrus[0][0]*sarrus[1][1];
    hasil+=temp;
    System.out.println(hasil);
    temp=sarrus[0][1]*sarrus[1][0];
    hasil-=temp;
    System.out.println(hasil);
   }else{
    sarrus=new int[a.length][a[0].length+a.length-1];
    int temp=1;
    for(int i=0;i<sarrus.length;i++){
     for(int j=0;j<sarrus[i].length;j++){
      if(j>=a[0].length)
      sarrus[i][j]=a[i][j-a[0].length];
      else
      sarrus[i][j]=a[i][j];
     }
    }
    for(int i=0;i<sarrus.length;i++){
     for(int j=0;j<sarrus[i].length;j++){
      System.out.print(sarrus[i][j]+" ");
     }
     System.out.println("");
    }
    for(int i=0;i<a.length;i++){
    temp=1;
     for(int j=0;j<a[0].length;j++){
      temp*=sarrus[j][i+j];
     }
     hasil+=temp;
    }
    System.out.println(hasil);
    for(int i=sarrus[0].length-1;i>=a[0].length-1;i--){
     temp=1;
     for(int j=0;j<a[0].length;j++){
      temp*=sarrus[j][i-j];
     }
     hasil-=temp;
    }
    System.out.println(hasil);
   }
   return hasil;
  }
 }