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();
}
}