import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JButton;
import javax.swing.SwingConstants;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Aplicacao_Trabalho_Final extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private Clientes raiz;
private JPanel contentPane;
private JTextField tf_Telefone;
private JTextField tf_CPF;
private JTextField tf_Codigo;
private JTextField tf_Nome;
private JTable table;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Aplicacao_Trabalho_Final frame = new Aplicacao_Trabalho_Final();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Aplicacao_Trabalho_Final() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 507, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
JPanel Painel_botões = new JPanel();
JPanel Painel_Registro = new JPanel();
JScrollPane scrollPane = new JScrollPane();
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addComponent(Painel_Registro, GroupLayout.DEFAULT_SIZE, 481, Short.MAX_VALUE)
.addComponent(Painel_botões, GroupLayout.DEFAULT_SIZE, 481, Short.MAX_VALUE)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 481, GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(Painel_botões, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(2)
.addComponent(Painel_Registro, GroupLayout.PREFERRED_SIZE, 122, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 92, GroupLayout.PREFERRED_SIZE)
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {
},
new String[] {
"Codigo", "Nome", "CPF", "Telefone"
}
));
table.setBorder(new LineBorder (Color.green));
table.setGridColor(Color.green);
table.setShowGrid(true);
scrollPane.setViewportView(table);
table.getColumnModel().getColumn(0).setPreferredWidth(20);
table.getColumnModel().getColumn(1).setPreferredWidth(150);
table.getColumnModel().getColumn(2).setPreferredWidth(70);
table.getColumnModel().getColumn(3).setPreferredWidth(70);
JLabel label = new JLabel("");
JLabel lblNome = new JLabel("Nome");
JLabel lblCdigo = new JLabel("C\u00F3digo");
JLabel lblCpf = new JLabel("CPF");
JLabel lblTelefone = new JLabel("Telefone");
tf_Telefone = new JTextField();
tf_Telefone.setColumns(10);
tf_CPF = new JTextField();
tf_CPF.setColumns(10);
tf_Codigo = new JTextField();
tf_Codigo.setColumns(10);
tf_Nome = new JTextField();
tf_Nome.setColumns(10);
JButton btnInserir = new JButton("Inserir");
btnInserir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
inserir();
}
});
JButton btnCancelar = new JButton("Cancelar");
btnCancelar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Runtime.getRuntime();
}
});
GroupLayout gl_Painel_Registro = new GroupLayout(Painel_Registro);
gl_Painel_Registro.setHorizontalGroup(
gl_Painel_Registro.createParallelGroup(Alignment.LEADING)
.addGroup(gl_Painel_Registro.createSequentialGroup()
.addGroup(gl_Painel_Registro.createParallelGroup(Alignment.LEADING)
.addGroup(gl_Painel_Registro.createSequentialGroup()
.addGap(212)
.addComponent(label))
.addGroup(gl_Painel_Registro.createSequentialGroup()
.addContainerGap()
.addGroup(gl_Painel_Registro.createParallelGroup(Alignment.LEADING)
.addGroup(gl_Painel_Registro.createSequentialGroup()
.addComponent(lblNome, GroupLayout.PREFERRED_SIZE, 42, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(tf_Nome, GroupLayout.DEFAULT_SIZE, 425, Short.MAX_VALUE))
.addGroup(gl_Painel_Registro.createSequentialGroup()
.addGroup(gl_Painel_Registro.createParallelGroup(Alignment.LEADING, false)
.addGroup(gl_Painel_Registro.createSequentialGroup()
.addComponent(lblCdigo)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(tf_Codigo))
.addGroup(gl_Painel_Registro.createSequentialGroup()
.addComponent(lblCpf)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(tf_CPF))
.addGroup(gl_Painel_Registro.createSequentialGroup()
.addComponent(lblTelefone)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(tf_Telefone, GroupLayout.PREFERRED_SIZE, 148, GroupLayout.PREFERRED_SIZE)))
.addGap(32)
.addComponent(btnInserir)
.addGap(18)
.addComponent(btnCancelar)))))
.addContainerGap())
);
gl_Painel_Registro.setVerticalGroup(
gl_Painel_Registro.createParallelGroup(Alignment.LEADING)
.addGroup(gl_Painel_Registro.createSequentialGroup()
.addGap(5)
.addComponent(label)
.addGroup(gl_Painel_Registro.createParallelGroup(Alignment.LEADING)
.addGroup(gl_Painel_Registro.createSequentialGroup()
.addGap(9)
.addComponent(lblNome)
.addPreferredGap(ComponentPlacement.RELATED))
.addGroup(Alignment.TRAILING, gl_Painel_Registro.createSequentialGroup()
.addPreferredGap(ComponentPlacement.RELATED, 9, Short.MAX_VALUE)
.addComponent(tf_Nome, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(6)))
.addGroup(gl_Painel_Registro.createParallelGroup(Alignment.BASELINE)
.addComponent(tf_Codigo, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(lblCdigo))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_Painel_Registro.createParallelGroup(Alignment.BASELINE)
.addComponent(lblCpf)
.addComponent(tf_CPF, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(btnInserir)
.addComponent(btnCancelar))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_Painel_Registro.createParallelGroup(Alignment.BASELINE)
.addComponent(lblTelefone)
.addComponent(tf_Telefone, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
gl_Painel_Registro.linkSize(SwingConstants.HORIZONTAL, new Component[] {lblNome, lblCdigo, lblCpf, lblTelefone});
gl_Painel_Registro.linkSize(SwingConstants.HORIZONTAL, new Component[] {btnInserir, btnCancelar});
Painel_Registro.setLayout(gl_Painel_Registro);
//dtm.addRow(new Object[]{"","","","",""});
JButton btnPesquisar = new JButton("Pesquisar");
btnPesquisar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
busca();
}
});
JButton btnDeletar = new JButton("Deletar");
btnDeletar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
delete();
}
});
JButton btnInorder = new JButton("InOrder");
btnInorder.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
travessia(2);
}
});
JButton btnPreorder = new JButton("PreOrder");
btnPreorder.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
travessia(1);
}
});
JButton btnPosorder = new JButton("PosOrder");
btnPosorder.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
travessia(3);
}
});
GroupLayout gl_Painel_botões = new GroupLayout(Painel_botões);
gl_Painel_botões.setHorizontalGroup(
gl_Painel_botões.createParallelGroup(Alignment.LEADING)
.addGroup(gl_Painel_botões.createSequentialGroup()
.addComponent(btnPesquisar)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnDeletar)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnInorder)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnPreorder)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnPosorder)
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
gl_Painel_botões.setVerticalGroup(
gl_Painel_botões.createParallelGroup(Alignment.LEADING)
.addGroup(gl_Painel_botões.createSequentialGroup()
.addGroup(gl_Painel_botões.createParallelGroup(Alignment.BASELINE)
.addComponent(btnPesquisar)
.addComponent(btnDeletar)
.addComponent(btnInorder)
.addComponent(btnPreorder)
.addComponent(btnPosorder))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
gl_Painel_botões.linkSize(SwingConstants.VERTICAL, new Component[] {btnPesquisar, btnDeletar, btnInorder, btnPreorder, btnPosorder});
gl_Painel_botões.linkSize(SwingConstants.HORIZONTAL, new Component[] {btnPesquisar, btnDeletar, btnInorder, btnPreorder, btnPosorder});
Painel_botões.setLayout(gl_Painel_botões);
contentPane.setLayout(gl_contentPane);
this.raiz = new Clientes();
}
private void inserir() {
String codigoSTR = tf_Codigo.getText();
double codigo = Double.parseDouble(codigoSTR);
String nome= tf_Nome.getText();
String cpf = tf_CPF.getText();
String telefone =tf_Telefone.getText();
Clientes novoNo = new Clientes();
novoNo.setCodigo(codigo);
novoNo.setNome(nome);
novoNo.setCpf(cpf);
novoNo.setTelefone(telefone);
if (raiz == null)
raiz = novoNo;
else
{
Clientes atual = raiz;
Clientes parente;
while (true)
{
parente = atual;
if (codigo < atual.getCodigo())
{
atual = atual.getFilhosDaEsquerda();
if (atual == null)
{
parente.setFilhosDaEsquerda(novoNo);
return;
}
}
else
{
atual = atual.getFilhosDaDireita();
if (atual == null)
{
parente.setFilhosDaDireita(novoNo);
return;
}
}
}
}
}
private void travessia(int tipoTravessia) {
switch (tipoTravessia) {
case 1:
preOrder(raiz);
break;
case 2:
inOrder(raiz);
break;
case 3:
posOrder(raiz);
break;
}
}
private void preOrder(Clientes localraiz) {
if (localraiz != null) {
localraiz.mostraNo();
preOrder(localraiz.getFilhosDaEsquerda());
preOrder(localraiz.getFilhosDaDireita());
}
}
private void inOrder(Clientes localraiz) {
if (localraiz != null) {
inOrder(localraiz.getFilhosDaEsquerda());
localraiz.mostraNo();
inOrder(localraiz.getFilhosDaDireita());
}
}
private void posOrder(Clientes localraiz) {
if (localraiz != null) {
posOrder(localraiz.getFilhosDaEsquerda());
posOrder(localraiz.getFilhosDaDireita());
localraiz.mostraNo();
}
}
private Clientes busca(){
JOptionPane.showInputDialog("Forneça o Código");
String codSTR = tf_Codigo.getText();
double cod = Double.parseDouble(codSTR);
Clientes atual = raiz;
while (atual.getCodigo() != cod)
{
if (cod < atual.getCodigo())
atual = atual.getFilhosDaEsquerda();
else
atual = atual.getFilhosDaDireita();
if (atual == null)
return null;
JOptionPane.showMessageDialog(null, "Nenhum Resultado");
}
return atual;
}
private boolean delete()
{
JOptionPane.showInputDialog("Forneça o Código");
String chaveSTR = tf_Codigo.getText();
double chave = Double.parseDouble(chaveSTR);
Clientes atual = raiz;
Clientes parente = raiz;
boolean eFilhosDaEsquerda = true;
while (atual.getCodigo() != chave)
{
parente = atual;
if (chave < atual.getCodigo())
{
eFilhosDaEsquerda = true;
atual = atual.getFilhosDaEsquerda();
} else
{
eFilhosDaEsquerda = false;
atual = atual.getFilhosDaDireita();
}
if (atual == null)
return false;
}
if (atual.getFilhosDaEsquerda() == null && atual.getFilhosDaDireita() == null) {
if (atual == raiz)
raiz = null;
else if (eFilhosDaEsquerda)
parente.setFilhosDaEsquerda(null);
else
parente.setFilhosDaDireita(null);
}
else if (atual.getFilhosDaDireita() == null)
if (atual == raiz)
raiz = atual.getFilhosDaDireita();
else if (eFilhosDaEsquerda)
parente.setFilhosDaDireita(atual.getFilhosDaEsquerda());
else
parente.setFilhosDaDireita(atual.getFilhosDaDireita());
else if (atual.getFilhosDaEsquerda() == null)
if (atual == raiz)
raiz = atual.getFilhosDaDireita();
else if (eFilhosDaEsquerda)
parente.setFilhosDaEsquerda(atual.getFilhosDaDireita());
else
parente.setFilhosDaDireita(atual.getFilhosDaDireita());
else
{
Clientes successor = getSuccessor(atual);
if (atual == raiz)
raiz = successor;
else if (eFilhosDaEsquerda)
parente.setFilhosDaEsquerda(successor);
else
parente.setFilhosDaDireita(successor);
successor.setFilhosDaDireita(atual.getFilhosDaDireita());
}
return true;
}
private Clientes getSuccessor(Clientes deleteNo) {
Clientes sucessorParente = deleteNo;
Clientes sucessor = deleteNo;
Clientes atual = deleteNo.getFilhosDaDireita();
while (atual != null){
sucessorParente = sucessor;
sucessor = atual;
atual = atual.getFilhosDaDireita();
}
if (sucessor != deleteNo.getFilhosDaDireita()){
sucessorParente.setFilhosDaDireita(sucessor.getFilhosDaDireita());
sucessor.setFilhosDaDireita(deleteNo.getFilhosDaDireita());
}
JOptionPane.showMessageDialog(null, "Removido Com Sucesso");
return sucessor;
}
}