Mostrando postagens com marcador abstração. Mostrar todas as postagens
Mostrando postagens com marcador abstração. Mostrar todas as postagens

quarta-feira, 27 de março de 2013

Modelagem de Domínio





Um modelo de domínio é uma representação visual de classes conceituais ou objetos do mundo real, em um contexto (Fowler, 1996). Ou seja, é uma descrição de coisas/conceitos em uma situação real, mas não de objetos de software, tais como classes em Java, por exemplo. O modelo de domínio, produzido na etapa de análise, ajuda na elaboração da lista de requisitos.

Nesse sentido, um tom determina 8 acordes (sem as variações) a serem tocados. Um tom pode ser maior ou menor; por causa disso, temos que Acordes Maior e Acordes Menor são um tipo de Acorde. Um acorde é composto por 3 notas tocadas simultaneamente. As instâncias C e C#m são apenas um exemplo de nota e acorde, respectivamente.

quarta-feira, 2 de janeiro de 2013

Prévia da Interface Gráfica: Stringless Guitar - Parte 3


Nessa parte iremos abordar sobre os tratadores de evento de selecionar um item do JComboBox. Ao consultar a documentação (API), descobrimos como prosseguir diante desta situação. Há dois métodos de duas interfaces distintas, respectivamente, ActionListener e ItemListener, que podem ser associados a um JComboBox. Devemos, portanto, criar uma classe que implemente uma dessas interfaces, e instanciar um objeto que será registrado como o handler de evento.

Ambos funcionam, mas é preciso ressaltar a diferença de comportamento entre ambos. Para cada item selecionado, a seleção de outro item é primeiro removida - então ocorrem dois ItemEvents quando um item é selecionado. Ou seja, quando você selecionar um item, este método (itemStateChanged) será disparado duas vezes, ficando propensa a ocorrência de futuros bugs.

Então, optamos por utilizar um action listener. As duas condições dentro do método actionPerformed determinam a origem do evento (se ele é oriundo da primeira ou segunda combo box). 


void addActionListener(ActionListener) : Adiciona um action listener ao combo box. O método actionPerformed do listener é chamado quando o usuário seleciona um item do combo box ou, quando num combo box editável, quando o usuário pressiona Enter.

void addItemListener(ItemListener) : Adiciona um item listener ao combo box. O método itemStateChanged do listener é chamado quando o estado de seleção de qualquer um dos combo box's muda.



import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;


public class TesteEventoJComboBox extends JFrame implements ActionListener {

JComboBox comboBoxTomMenor;
JComboBox comboBoxTomMaior;

public TesteEventoJComboBox(){
super("Teste Evento JComboBox");
Container container = this.getContentPane();
container.setLayout(new FlowLayout());

String[] listaAfinacaoMaior = {"Selecione um tom maior","C", "Db", "D", "Eb", "E", "F", "F#", "G", "Ab", "A", "Bb", "B"};
String[] listaAfinacaoMenor = {"Selecione um tom menor","C", "C#", "D", "Eb", "E", "F", "F#", "G", "G#", "A", "Bb", "B"};

comboBoxTomMaior = new JComboBox(listaAfinacaoMaior);
container.add(comboBoxTomMaior);

comboBoxTomMenor = new JComboBox(listaAfinacaoMenor);
container.add(comboBoxTomMenor);

comboBoxTomMaior.setEditable(false);
comboBoxTomMenor.setEditable(false);

comboBoxTomMaior.addActionListener(this);
comboBoxTomMenor.addActionListener(this);
}


public static void main(String[] args) {
TesteEventoJComboBox t = new TesteEventoJComboBox();
t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
t.setSize(250, 150);
t.setVisible(true);
}


@Override
public void actionPerformed(ActionEvent event) {
if(event.getSource() == comboBoxTomMaior){
JOptionPane.showMessageDialog(null, String.format("Você clicou %s", comboBoxTomMaior.getSelectedItem()));
}

if(event.getSource() == comboBoxTomMenor) {
JOptionPane.showMessageDialog(null, String.format("Você clicou %s", comboBoxTomMenor.getSelectedItem()));
}
}

}








Fontes de Referência

DEITEL, H.M; DEITEL, P.J, Java, Como Programar -8ªed. – São Paulo: Prentice Hall, 2010.
http://geekycoder.wordpress.com/2008/07/28/tipjava-difference-between-actionlistener-and-itemlistener/
http://javafree.uol.com.br/topic-864599-JComboBox-eventos-duplicados.html
http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#listeners

domingo, 23 de dezembro de 2012

Prévia da Interface Gráfica: Stringless Guitar - Parte 1


As funcionalidades de nossa interface gráfica, como anteriormente explicitadas, devem ser divididas em níveis de abstração para facilitar o entendimento e a programação. Para isso, vamos atacar o problema pelos seguintes pontos:


  1. JButtons (botões);
  2. JComboBox (lista de itens drop-down);
  3. Tratadores de evento: selecionar um item do JComboBox/clicar em um botão;
  4. Lógica de abrir arquivo de áudio (por URL ou especificar o caminho de um arquivo local C://).



Por enquanto, testamos separadamente para analisar o comportamento dos componentes Swing JButton e JComboBox. O código abaixo testa os 8 botões da aplicação que, no futuro vão aparecer na tela após ser selecionado um item da lista de afinações (JComboBox). Serão 8 botões diferentes para cada item dessa caixa selecionável, contendo um arquivo midi diferente.







 





import javax.swing.JFrame;
import javax.swing.JOptionPane;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

public class ButtonFrame extends JFrame {
private JButton button1;
private JButton button2;
private JButton button3;

private JButton button4;
private JButton button5;
private JButton button6;
private JButton button7;
private JButton button8;

private ButtonHandler handler;

/*Em
Am
Dm
G
C
F
Bb
Bdim
*/
public void makeButtons(){ Container c = this.getContentPane(); setLayout(new FlowLayout()); button1 = new JButton("Em"); c.add(button1); button2 = new JButton("Am"); c.add(button2); button3 = new JButton("Dm"); c.add(button3); button4 = new JButton("G"); c.add(button4); button5 = new JButton("C"); c.add(button5); button6 = new JButton("F"); c.add(button6); button7 = new JButton("Bb"); c.add(button7); button8= new JButton("Bdim"); c.add(button8); }

public void tratarEventoBotao(ButtonHandler handler){ //cria novo ButtonHandler para tratamento de evento de botão handler = new ButtonHandler();
button1.addActionListener(handler); button2.addActionListener(handler); button3.addActionListener(handler); button4.addActionListener(handler); button5.addActionListener(handler); button6.addActionListener(handler); button7.addActionListener(handler); button8.addActionListener(handler); }

public ButtonFrame(){
super("Testando JButtons"); makeButtons(); tratarEventoBotao(handler);
}

private class ButtonHandler implements ActionListener{

@Override
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(ButtonFrame.this, String.format("Você clicou %s", event.getActionCommand()));

}

}

public static void main(String[] args) {

ButtonFrame b = new ButtonFrame();
b.setSize(250,140);
        b.setVisible(true);
}
}