Created with colorer-take5 library. Type 'java' import java.awt.*; import javax.swing.*; import javax.swing.table.*; public class BubbleSortDemo extends javax.swing.JApplet { // variables for sorting private int[] array; private int swap; private int index; private int index2; private boolean swapped; private boolean finished; // other variables private LineArray varray1; private IntArrayTableModel arrayTableModel; private boolean show_max=false; private boolean application=false; /** Initializes the applet BubbleSortDemo */ public void init() { array=new int[20]; arrayTableModel=new IntArrayTableModel(); arrayTableModel.setArray(array); initComponents(); varray1=new LineArray(array); demoArea.add(varray1); varray1.setBounds(20, 100, 480, 360); TableCellRenderer colorRenderer=new TableCellRenderer() { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { DefaultTableCellRenderer renderer=new DefaultTableCellRenderer(); renderer.setHorizontalAlignment(JLabel.CENTER); Component component=renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if(row==index && !finished) { component.setBackground(Color.red); component.setForeground(Color.white); } else if(row>index2) { component.setBackground(Color.blue); component.setForeground(Color.white); } else { component.setBackground(Color.white); component.setForeground(Color.black); } return component; } }; TableColumn i_column=varray3.getColumn("i"); i_column.setCellRenderer(colorRenderer); i_column.setPreferredWidth(25); TableColumn value_column=varray3.getColumn("value"); value_column.setCellRenderer(colorRenderer); } public void start() { initBubbleSort(); if(!application) { String show_max_param=getParameter("show_maximum"); String show_max_button_param=getParameter("show_maximum_button"); if("0".equals(show_max_param) || "no".equals(show_max_param.toLowerCase())) { show_max=false; } else { show_max=true; } if("0".equals(show_max_button_param) || "no".equals(show_max_button_param.toLowerCase())) { //showMaxButton.setEnabled(false); jPanel1.remove(showMaxButton); } else { //showMaxButton.setEnabled(true); jPanel1.add(showMaxButton); } } display(); } public void initBubbleSort() { initArray(100); index=0; index2=array.length-1; swapped=false; finished=false; } public void display() { indexField.setText(Integer.toString(index)); index1Field.setText(Integer.toString(array[index])); index2Field.setText(Integer.toString(array[index+1])); swapField.setText(Integer.toString(swap)); swappedField.setText(Boolean.toString(swapped)); if(swapped) { swappedField.setForeground(Color.RED); } else { swappedField.setForeground(Color.BLUE); } statusField.setText(finished ? "Finished" : "Processing"); varray1.setIndex(index,index2,finished,show_max); //varray2.setSelectedIndex(index); //varray3. if(array[index]>array[index+1]) { compareField.setText("arr[index]>arr[index+1], will swap"); compareField.setForeground(Color.RED); } else { compareField.setText("arr[index]<=arr[index+1]"); compareField.setForeground(Color.BLUE); } repaint(); } protected void step() { if(!finished) { if(array[index]>array[index+1]) { swap=array[index]; array[index]=array[index+1]; array[index+1]=swap; swapped=true; } index++; if(index>=index2 || index2==1) { index2--; index=0; if(!swapped) { finished=true; } swapped=false; } } } protected void initArray(int max) { for(int i=0;i<array.length;i++) { array[i]=(int)(Math.random()*max); } } /** This method is called from within the init() method to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents Controls = new javax.swing.JPanel(); test1Button = new javax.swing.JButton(); demoArea = new javax.swing.JPanel(); index1Field = new javax.swing.JTextField(); index2Field = new javax.swing.JTextField(); swapField = new javax.swing.JTextField(); indexField = new javax.swing.JTextField(); swappedField = new javax.swing.JTextField(); statusField = new javax.swing.JTextField(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); compareField = new javax.swing.JTextField(); jScrollPane2 = new javax.swing.JScrollPane(); varray3 = new javax.swing.JTable(); jPanel1 = new javax.swing.JPanel(); initButton = new javax.swing.JButton(); sortedButton = new javax.swing.JButton(); backsortedButton = new javax.swing.JButton(); outlanderGrtButton = new javax.swing.JButton(); outlanderLessButton = new javax.swing.JButton(); showMaxButton = new javax.swing.JButton(); Controls.setBorder(new javax.swing.border.EtchedBorder()); test1Button.setText("Step"); test1Button.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { test1ButtonActionPerformed(evt); } }); Controls.add(test1Button); getContentPane().add(Controls, java.awt.BorderLayout.NORTH); demoArea.setLayout(null); index1Field.setEditable(false); demoArea.add(index1Field); index1Field.setBounds(150, 40, 60, 20); index2Field.setEditable(false); demoArea.add(index2Field); index2Field.setBounds(150, 70, 60, 20); swapField.setEditable(false); demoArea.add(swapField); swapField.setBounds(360, 10, 50, 20); indexField.setEditable(false); demoArea.add(indexField); indexField.setBounds(150, 10, 60, 20); swappedField.setEditable(false); swappedField.setText("swapped"); demoArea.add(swappedField); swappedField.setBounds(360, 40, 50, 20); statusField.setText("Processing"); demoArea.add(statusField); statusField.setBounds(540, 0, 90, 20); jLabel1.setText("index:"); demoArea.add(jLabel1); jLabel1.setBounds(10, 10, 50, 14); jLabel2.setText("Current ( arr[index] ):"); demoArea.add(jLabel2); jLabel2.setBounds(10, 40, 130, 14); jLabel3.setText("Next ( arr[index+1] ):"); demoArea.add(jLabel3); jLabel3.setBounds(10, 70, 130, 14); jLabel4.setText("swap:"); demoArea.add(jLabel4); jLabel4.setBounds(290, 10, 40, 14); jLabel5.setText("swapped:"); demoArea.add(jLabel5); jLabel5.setBounds(290, 40, 60, 14); compareField.setEditable(false); demoArea.add(compareField); compareField.setBounds(260, 70, 220, 20); varray3.setModel(arrayTableModel); jScrollPane2.setViewportView(varray3); demoArea.add(jScrollPane2); jScrollPane2.setBounds(520, 30, 70, 440); getContentPane().add(demoArea, java.awt.BorderLayout.CENTER); initButton.setText("Init"); initButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { initButtonActionPerformed(evt); } }); jPanel1.add(initButton); sortedButton.setText("Sorted"); sortedButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { sortedButtonActionPerformed(evt); } }); jPanel1.add(sortedButton); backsortedButton.setText("Backsorted"); backsortedButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { backsortedButtonActionPerformed(evt); } }); jPanel1.add(backsortedButton); outlanderGrtButton.setText("Outlander 1"); outlanderGrtButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { outlanderGrtButtonActionPerformed(evt); } }); jPanel1.add(outlanderGrtButton); outlanderLessButton.setText("Outlander 2"); outlanderLessButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { outlanderLessButtonActionPerformed(evt); } }); jPanel1.add(outlanderLessButton); showMaxButton.setText("Show Maximum"); showMaxButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { showMaxButtonActionPerformed(evt); } }); jPanel1.add(showMaxButton); getContentPane().add(jPanel1, java.awt.BorderLayout.SOUTH); }//GEN-END:initComponents private void showMaxButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showMaxButtonActionPerformed show_max=!show_max; display(); }//GEN-LAST:event_showMaxButtonActionPerformed private void outlanderLessButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_outlanderLessButtonActionPerformed initBubbleSort(); java.util.Arrays.sort(array); array[array.length/2]=array[array.length/2]/2; display(); }//GEN-LAST:event_outlanderLessButtonActionPerformed private void outlanderGrtButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_outlanderGrtButtonActionPerformed initBubbleSort(); java.util.Arrays.sort(array); array[array.length/2]=array[array.length/2]*2; display(); }//GEN-LAST:event_outlanderGrtButtonActionPerformed private void backsortedButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backsortedButtonActionPerformed initBubbleSort(); java.util.Arrays.sort(array); for(int i=0;i<array.length/2;i++) { int swap=array[i]; array[i]=array[array.length-i-1]; array[array.length-i-1]=swap; } display(); }//GEN-LAST:event_backsortedButtonActionPerformed private void sortedButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sortedButtonActionPerformed initBubbleSort(); java.util.Arrays.sort(array); display(); }//GEN-LAST:event_sortedButtonActionPerformed private void initButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_initButtonActionPerformed initBubbleSort(); display(); }//GEN-LAST:event_initButtonActionPerformed private void test1ButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_test1ButtonActionPerformed step(); display(); }//GEN-LAST:event_test1ButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel Controls; private javax.swing.JButton backsortedButton; private javax.swing.JTextField compareField; private javax.swing.JPanel demoArea; private javax.swing.JTextField index1Field; private javax.swing.JTextField index2Field; private javax.swing.JTextField indexField; private javax.swing.JButton initButton; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JButton outlanderGrtButton; private javax.swing.JButton outlanderLessButton; private javax.swing.JButton showMaxButton; private javax.swing.JButton sortedButton; private javax.swing.JTextField statusField; private javax.swing.JTextField swapField; private javax.swing.JTextField swappedField; private javax.swing.JButton test1Button; private javax.swing.JTable varray3; // End of variables declaration//GEN-END:variables public static void main(String args[]) { JFrame f=new JFrame("Bubble Sort Demo"); f.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); BubbleSortDemo app=new BubbleSortDemo(); app.application=true; //f.getContentPane().setLayout(new BorderLayout()); f.getContentPane().add(app,BorderLayout.CENTER); f.setSize(800,600); app.init(); app.start(); f.show(); } }