Allora, ho questo problema:
Devo costruire una jtable in cui vado a inserire dei valori....clicco un bottone e i valori inseriti devono essere ordinati in maniera crescente e ad ogni passo devo colorare in maniera differente le celle ordinate da quelle non ordinate.
Ho fatto quasi tutto, ma non capisco perchè non riesco a gestire la parte relativa ai colori....chi mi da una mano?
codice:import java.applet.Applet; import javax.swing.*; import javax.swing.text.*; import javax.swing.Timer; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.border.Border; import javax.swing.border.TitledBorder; import javax.swing.filechooser.FileFilter; import javax.swing.table.*; import javax.swing.JPanel.*; public class Ordinamento extends JFrame { JPanel pannelloOrdinamento = new JPanel(); private JTable miaTab = new JTable(); private JPanel mioPane = new JPanel(); private JPanel mioPaneB = new JPanel(); JButton ordinaB; JTextField testoCustom = new JTextField(); int[] mioarray = new int[50]; int numRighe = 5; int numColonne = 10; int contaPassi = 0; int rigaC; int colonnaC; RenderRedGreen mioRender = new RenderRedGreen() ; final class RenderRedGreen extends DefaultTableCellRenderer { RenderRedGreen () { setHorizontalAlignment(SwingConstants.RIGHT); } public Component getTableCellRendererComponent(JTable aTable, Object aNumberValue, boolean aIsSelected, boolean aHasFocus, int aRow, int aColumn) { Component renderer = super.getTableCellRendererComponent(aTable, aNumberValue, aIsSelected, aHasFocus, aRow, aColumn); if (aRow == rigaC && aColumn == colonnaC ) { renderer.setBackground(Color.red); } return renderer; } } /************************************** *inizio alogoritmo di selezione *************************************/ public class SelectionSorter { public SelectionSorter(int[] anArray) { int[] a = anArray; } public void ordina() { contaPassi = 0; for (int i=0; i < mioarray.length - 1; i++) { contaPassi ++; int minPos = minimumPosition(i); swap(minPos, i, contaPassi); } JOptionPane.showMessageDialog(null, "Ordinamento per selezione effettuato!"); } private int minimumPosition(int from) { int minPos = from; for (int i = from + 1; i < mioarray.length; i++) { if (mioarray[i] < mioarray[minPos]) { minPos = i; } } return minPos; } private void swap(int i, int j, int conta) { int temp = mioarray[i]; mioarray[i] = mioarray[j]; mioarray[j] = temp; int rigaArray1 = i/numColonne; int colonnaArray1 = i - (rigaArray1*numColonne); int rigaArray2 = j/numColonne; int colonnaArray2 = j - (rigaArray2*numColonne); int rigaConta = conta/numColonne; int colonnaConta = conta - (rigaConta*numColonne); miaTab.setValueAt(mioarray[i],rigaArray1,colonnaArray1); miaTab.setValueAt(mioarray[j],rigaArray2,colonnaArray2); rigaC = rigaConta; colonnaC = colonnaConta; miaTab.setDefaultRenderer(Object.class, mioRender ); miaTab.revalidate(); JOptionPane.showMessageDialog(null, "Algoritmo di Ordinamento - Passo n. "+contaPassi); } } public class Modello extends DefaultTableModel { public Modello(String nomiColonne[], int numRighe){ super(nomiColonne, numRighe); } public boolean isCellEditable(int row, int column){ return true; } } public Ordinamento() { super("Ordinamento"); setSize(800, 400); Object[] rig = new Object[5]; miaTab.setGridColor(Color.black); miaTab.setIntercellSpacing(new Dimension(0, 0)); Modello mioModel = new Modello(new String[10], 4); miaTab.setModel(mioModel); miaTab.setCellSelectionEnabled(true); miaTab.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); miaTab.repaint(); mioPane.setLayout(new FlowLayout()); mioPane.add(miaTab); mioPaneB.setLayout(new GridLayout(10, 0)); mioModel.addRow(rig); ordinaB = new JButton("Inizia Ordinamento"); mioPaneB.add(ordinaB); pannelloOrdinamento.setLayout(new BorderLayout()); ActionListener ordinaBListener = new ordinaBtnListener(); ordinaB.addActionListener(ordinaBListener); getContentPane().add(BorderLayout.NORTH, mioPane); getContentPane().add(BorderLayout.CENTER, mioPaneB); getContentPane().add(BorderLayout.SOUTH, testoCustom); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); System.out.println("Aperto il Programma"); } class ordinaBtnListener implements ActionListener { public void actionPerformed(ActionEvent e) { try { for (int v=0 ; v < mioarray.length; v++) { mioarray[v] = 0; } int indice = 0; for (int r = 1; r<= 5; r++ ) { for (int c = 1; c <= 10; c ++) { if (miaTab.getValueAt(r-1,c-1)== null || miaTab.getValueAt(r-1,c-1).toString().equals("") ) { mioarray[indice] = 0; } else { mioarray[indice] = Integer.parseInt(miaTab.getValueAt(r-1,c-1).toString()); } indice ++; } } SelectionSorter sorter = new SelectionSorter(mioarray); sorter.ordina(); for (int v=0 ; v < mioarray.length; v++) { System.out.println(mioarray[v]); } } catch (Exception ex) { System.out.println("eccezione2 " + ex); } } } public static void main(String argv[]) { try { //UIManager.setLookAndFeel("com.sun.java.swing.plaf.metal.MetalLookAndFeel"); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) {} Ordinamento t = new Ordinamento(); } }

Rispondi quotando