Oi Pessoal
O meu trabalho é encontrar a o melhor caminho, onde o usuário cadastra as Filiais e as Rotas entre essas Filiais, esta parte esta ok, consegui gerar
o melhor caminho, agora eu queria desenhar o grafo, ou seja, as aresta com os seus determinado nós, mas não consegui fazer isso, a minha primeira tentativa foi a seguinte:
Criei uma JDialog, e dentro dela adicionei um JPanel.
Neste JPanel eu coloquei os nós e guardei as posições deles.
Depois fui criar as arestas, utilizando método paint, segue o código:
public class TelaMelhorRota extends javax.swing.JDialog {
Filial[] filiais = null;
List<Filial> melhorRota = null;
int n=0;
int x=5, y=10;
JLabel label;
private JScrollPane jScrollPane;
Container c = getContentPane();
int rand=0;
/** Creates new form TelaMelhorRota1 */
public TelaMelhorRota(java.awt.Frame parent, boolean modal, List<Filial> melhorRota) {
super(parent, modal);
initComponents();
this.melhorRota = melhorRota;
//Image im1 = new ImageIcon(getClass().getResource("home.jpg")).getImage();
ImageIcon img = new ImageIcon((getClass().getResource("home.jpg")));
filiais = new Filial[melhorRota.size()];
int i=50, w=15, v=30;
for(Filial f: melhorRota){
adicionaFiliais(f);
}
}
/* Metodo que verifica se uma determinada Filial já
* esta no JPanel
*/
public boolean verificaFilial(Filial f){
boolean achou = false;
for(int i=0;i<=filiais.length-1;i++){
if((filiais[i]!=null)){
if(filiais[i].getNomeFilial().equals(f.getNomeFilial())){
achou = true;
}
}
}
return achou;
}
/* Metodo que adiciona uma Filial, guarda a sua posição
* para depois criar as retas
*/
public void adicionaFiliais(Filial f){
if(!verificaFilial(f)){
filiais[n] = f;
JLabel jNomeFilial = new JLabel();
jNomeFilial.setText(f.getNomeFilial());
jNomeFilial.setBounds(x, y, 50, 50);
filiais[n].setX(x);
filiais[n].setY(y);
x = x + 20;
y = y + 40;
//panelRota.add(jNomeFilial);
jNomeFilial.setVisible(true);
n++;
}
}
//aqui sao desenhadas as retas
public void paint(Graphics g){
super.paint(g);
for(Filial f:melhorRota){
if(f.getAnterior()!=null){
for(int i=0;i<=filiais.length-1;i++){
if(filiais[i]!=null){
if(filiais[i].getNomeFilial().equals(f.getAnterior().getNomeFilial())){
g.drawLine(f.getX(), f.getY(), filiais[i].getX(), filiais[i].getY());
}
}
}
}
}
}
//Netbeans
/** This method is called from within the constructor to
* initialize the form.
*
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents() {
jButton1 = new javax.swing.JButton();
getContentPane().setLayout(null);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Melhor Rota Encontrada");
jButton1.setText("Gerar relatorio PDF");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
getContentPane().add(jButton1);
jButton1.setBounds(540, 580, 200, 23);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-781)/2, (screenSize.height-664)/2, 781, 664);
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Relatorio relatorio = new Relatorio();
relatorio.geraRelatorio(melhorRota);
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
}
O problema é que só é desnehada uma linha e na JDialog, não na JPAnel, alguém pode me ajudar por favor???
Origada :-o