Escolar Documentos
Profissional Documentos
Cultura Documentos
ExistemdiversossoftwaresqueforamescritoscomaplataformaNetBeans,inclusiveIDEsparaoutraslinguagens.
Porm o software mais popular e utilizado o NetBeans IDE este justamente o IDE que utilizamos e
utilizaremos aqui no curso. O NetBeans IDE representado pela plataforma NetBeans com um conjunto de
pluginsqueofeceremosuportealinguagemJava:wizard,coloridodocdigo,debuging,suporteaRDBMSentre
outros.Portantopodemosresumirque:
NetBeansPlatformumncleobsicodeserviosparaaplicativosdesktop.
NetBeansIDEoNetBeansPlatformcomdiversospluginsparadesenvolvimentoJava.
1IntroduoplataformaNetBeans
Anotaes
Odownloadpodeserfeitoapartirdositehttp://www.netbeans.orgeainstaoamaistrivialpossvel:cliqueem
nextatofinish...
AgoraquandochegarpginadedownloadsaberadiferenaentreIDEePlatform:
TreinamentonaPlataformaNetBeans
Anotaes
Vamos fazer uma analisa mais neutra possvel, mesmo tratando apenas de NetBeans neste treinamento. Caso
discordedealgumapontuaosintaseavontadeparadiscutilaemsaladeaulacomoinstrutoreaturma.
5. Um dilogo ser apresentado para voc digitar o nome da classe e do pacote digiteos e clique em
.
6. Como resultado desta operao o NetBeans apresentar o Frame Swing no seu editor visual. Caso j
tenha trabalhado com Delphi ou Visual Basic, ter maior facilidade de uso do NetBeans pois diversas
caractersticassosimilares.
7. Para desenhar sua tela basta selecionar componentes da paleta e efetuar draganddrop. Ao terminar
cliqueemRunparaexecutarseuaplicativo.
TreinamentonaPlataformaNetBeans
Anotaes
3 31 1
2 InterfacesgrficascomJavaeNetBeans
2.1 Swing
SwingaAPImaisrecenteparadesenvolvimentodeinterfacesgrficasbaseadaemAWT,masmuitomaisrica
emcomponentes.
Esta API no depende de cdigo nativo para representar botes, janelas e outros componentes grficos, sendo
totalmenteindependentedeplataformaedesenhandoseusprprioscomponentes.
A classe JComponent a superclasse de todos os componentes que no so containers de outros, sendo
derivadadeComponent,comopodemosobservarnoseguintediagramadeclasses:
2.1.1 Containers
Vejamosodiagramaabaixo:
2InterfacesgrficascomJavaeNetBeans
Anotaes
3 32 2
2.1.2 Criandoumaj anelasi mpl es
Exemplo:FrameSwing1.java
packagebr.com.globalcode.swing
importjavax.swing.*
publicclassFrameSwing1extendsJFrame{
publicFrameSwing1(){
super("JanelaSwing")
setSize(275,100)
show()
}
publicstaticvoidmain(Stringargs[]){
FrameSwing1t=newFrameSwing1()
}
}
Importante:
Esta janela possui comportamento padro HIDE_ON_CLOSE no boto fechar (X no canto
superior direito), ou seja, quando clicamos, a janela escondida, mas o processo continua
sendo executado. Recomendamos configurar o comportamento de fechamento default,
utilizandooseguintemtododaclasseJFrame, queprovocaotrminodaexecuo.:
setDefaultCloseOperation(EXIT_ON_CLOSE)
Exemplo:FrameSwing2.java
packagebr.com.globalcode.swing
importjavax.swing.*
publicclassFrameSwing2extendsJFrame{
publicFrameSwing2(){
super("JanelaSwing")
//UtilizamosaconstantedeclaradanaclasseJFrameparadefinir
//ocomportamentopadraonofechamentodajanela
setDefaultCloseOperation(EXIT_ON_CLOSE)
setSize(275,100)
show()
}
publicstaticvoidmain(Stringargs[]){
FrameSwing2t=newFrameSwing2()
}
}
TreinamentonaPlataformaNetBeans
Anotaes
3 33 3
2.1.3 Adi cionandoumcomponenteaocontainer
A manipulao e adio de componentes no JFrame um pouco diferente da quevimos em AWT, pois nunca
manipulamosdiretamenteoJFrame.DevemossempreobterumarefernciaparaonicoContainercontidono
JFrame,obtidoatravsdachamadaaomtodogetContentPane().
No exemplo abaixo, iremos utilizar o JLabel, um dos componentes mais simples e que representa o texto em
umanicalinha,nopodendosereditadopelousurio.
UmJLabelpodeserconstrudodaseguinteforma:
JLabellabel1=newJLabel(Textodojlabel)
Exemplo:FrameSwingComLabel.java
packagebr.com.globalcode.swing
importjava.awt.Container
importjavax.swing.*
publicclassFrameSwingComLabelextendsJFrame{
publicFrameSwingComLabel(){
super("JanelaSwing")
//Utilizamosaconstantedeclaradanaclasse
//JFrameparadefinircomportamentopadrao
//nofechamentodajanela
setDefaultCloseOperation(EXIT_ON_CLOSE)
JLabellabel=newJLabel("TextodoJLabel")
Containerc=this.getContentPane()
c.add(label)
setSize(275,100)
show()
}
publicstaticvoidmain(Stringargs[]){
FrameSwingComLabelt=newFrameSwingComLabel()
}
}
2InterfacesgrficascomJavaeNetBeans
Anotaes
3 34 4
2.2 ComponentesSwing
2.2.1 javax.swing.JButton
Representaumbotocomrtulo.
Construtores
JButton(Stringtexto):ovalordavariveltextoserapresentadonoboto
JButton(Iconicone):oconeserapresentadonoboto.
Observao: Uma das formas de criarmos um cone a partir da classe ImageIcon, que pode ser
construdaapartirdeumaStringrepresentandoonomedaimagem.
Exemplo:ImageIconicone=newImageIcon(icone.gif)
ParamaisdetalhesconsulteoJavadoc.
Mtodos
voidsetMnemonic(intmnemonic): Podemosassociaratalhosaosbotesutilizandoestemtodo,
querecebeumintcomoparmetro,representadopelasconstantesdefinidasnaclasseKeyEvent.
Exemplosdeconstantes:
KeyEvent.VK_A=>AtalhoparaA
KeyEvent.VK_B=>AtalhoparaB
KeyEvent.VK_1=>Atalhopara1
TreinamentonaPlataformaNetBeans
Anotaes
3 35 5
Exemplo:TesteJButton.java
packagebr.com.globalcode.swing
importjava.awt.*
importjavax.swing.*
importjava.awt.event.KeyEvent
publicclassTesteJButtonextendsJFrame{
publicTesteJButton(){
super("TesteJButton")
setDefaultCloseOperation(EXIT_ON_CLOSE)
Containerc=getContentPane()
JButtonbotaoOk=newJButton("Ok")
botaoOk.setMnemonic(KeyEvent.VK_O)
c.add(botaoOk)
setSize(200,50)
show()
}
publicstaticvoidmain(Stringargs[]){
TesteJButtont=newTesteJButton()
}
}
2InterfacesgrficascomJavaeNetBeans
Anotaes
3 36 6
Exemplo: TesteJButtonComIcone.java
packagebr.com.globalcode.swing
importjava.awt.*
importjavax.swing.*
publicclassTesteJButtonComIconeextendsJFrame{
publicTesteJButtonComIcone(){
super("TesteJButton")
setDefaultCloseOperation(EXIT_ON_CLOSE)
Containerc=getContentPane()
//Criacaodeumiconecomumaimagem
ImageIconiconeBotao=newImageIcon("duke.gif")
//CriacaodeumbotaocomoiconeiconeBotao
JButtonbotaoIcone=newJButton(iconeBotao)
//Alteramosacordefundodobotaoparaficarcompativelcomaimagem
botaoIcone.setBackground(Color.WHITE)
c.add(botaoIcone)
setSize(80,150)
show()
}
publicstaticvoidmain(Stringargs[]){
TesteJButtonComIconet=newTesteJButtonComIcone()
}
}
TreinamentonaPlataformaNetBeans
Anotaes
3 37 7
2.2.2 javax.swing.JTextFi eld
Esta classe representa um campo de texto digitvel, usualmente empregado para campos de cadastro de uma
nicalinha.
Exemplo:TesteJTextField.java
packagebr.com.globalcode.swing
importjava.awt.*
importjavax.swing.*
publicclassTesteJTextFieldextendsJFrame{
publicTesteJTextField(){
super("TesteJTextField")
this.setDefaultCloseOperation(EXIT_ON_CLOSE)
Containerc=getContentPane()
JTextFieldtextField=newJTextField()
c.add(textField)
setSize(200,50)
show()
}
publicstaticvoidmain(Stringargs[]){
TesteJTextFieldt=newTesteJTextField()
}
}
MtodosparamanipulaodocontedodeumJTextField
StringgetText():retornaovalordotextocontidonoJTextField
voidsetText(Stringtexto):atribuiovalordavariveltextoaoJTextField
voidsetEditable(booleaneditable): habilitaoudesabilitaocomponentedetexto.Estemtodo
herdadodaclasseJTextComponent.
2InterfacesgrficascomJavaeNetBeans
Anotaes
3 38 8
2.2.3 javax.swing.JCheckbox
Um JCheckBox um componente grfico com dois possveis estados: selecionado" (true) ou "no
selecionado"(false).
Algunsconstrutores
JCheckBox(Stringtexto)
JCheckBox(Iconicone)
JCheckBox(Stringicone,booleanselected)
JCheckBox(Iconicone,booleanselected)
Exemplo:TesteJCheckbox.java
packagebr.com.globalcode.swing
importjava.awt.*
importjavax.swing.*
publicclassTesteJCheckboxextendsJFrame{
publicTesteJCheckbox(){
super("TesteJCheckbox")
setDefaultCloseOperation(EXIT_ON_CLOSE)
Containerc=getContentPane()
JPanelpOpcoes=montaPanelOpcoes()
c.add(pOpcoes)
setSize(275,100)
show()
}
publicJPanelmontaPanelOpcoes(){
JPanelp=newJPanel()
p.add(newJCheckbox("Opo1"))
//Podemosindicarqualoitemselecionado
p.add(newJCheckbox("Opo2",true))
p.add(newJCheckbox("Opo3"))
returnp
}
publicstaticvoidmain(Stringargs[]){
TesteJCheckboxt=newTesteJCheckbox()
}
}
TreinamentonaPlataformaNetBeans
Anotaes
3 39 9
2.2.4 javax.swing.JComboBox
Construtores
JComboBox()
JComboBox(Object[]itens)
JComboBox(Vectoritens).
Principaismtodos
voidaddItem(Objecto):adicionaumitemnaultimaposio
ObjectgetSelectedItem():retornaoitemselecionado
voidinsertItemAt(Objectitem,intposicao):insereumobjetonaposioespecificada
ObjectgetItemAt(intposio): retorna o item que estiver na posio especificada ou null se
elenoexistir
voidremoveAllItens():removetodosositensdoJComboBox
voidremoveItemAt(intposicao):removeoitemqueestivernaposioespecificada
voidsetEnabled(booleanhabilitado):habilitaounooJComboBox
voidsetSelectedItem(Objectitem):configuraqualseroitemselecionado
void setSelectedIndex(int posicao): configura qual ser o item selecionado atravs da sua
posionoJComboBox.
O componente JComboBox apresenta uma lista com scroll de itens, podendo ser configurado para que cada
elementopossasereditvel.
possvel construirmos um JComboBox passando como parmetro um Vector, contendo os elementos que
queremos exibir no JComboBox o texto exibido ser o resultado da chamada ao mtodo toString de cada
componente.
Neste exemplo, estamos adicionando objetos do tipo String ao JComboBox atravs do mtodo
addItem(String)
2InterfacesgrficascomJavaeNetBeans
Anotaes
4 40 0
Exemplo:TesteJComboBox.java
packagebr.com.globalcode.swing
importjava.awt.*
importjavax.swing.*
publicclassTesteJComboBoxextendsJFrame{
publicTesteJComboBox(){
super("TesteJComboBox")
setDefaultCloseOperation(EXIT_ON_CLOSE)
Containerc=getContentPane()
JComboBoxseletorBancos=newJComboBox()
seletorBancos.addItem("Itau")
seletorBancos.addItem("Bradesco")
seletorBancos.addItem("GlobalcodeBank")
c.add(seletorBancos)
setSize(275,50)
show()
}
publicstaticvoidmain(Stringargs[]){
TesteJComboBoxt=newTesteJComboBox()
}
}
TreinamentonaPlataformaNetBeans
Anotaes
4 41 1
2.2.5 javax.swing.JLi st
OcomponenteJListapresentaumalistacomscrolldeitens,podendoserconfiguradoparaqueousuriopossa
selecionar apenas um ou mltiplos itens. possvel adicionar qualquer componente. Construmos um JList
passando como parmetro um Vector, contendo os elementos que queremos exibir, o texto exibido ser o
resultadodachamadaaomtodotoStringdecadacomponente.
Construtores
JList()
JList(Object[]itens)
JList(Vectoritens).
Principaismtodos
intgetSelectedIndex():retornaondicedoprimeiroitemselecionado
int[] getSelectedIndices(): retorna um array de inteiros contendo os indices dos itens
selecionados
ObjectgetSelectedValue():retornaoprimeiroitemselecionado
Object[]getSelectedValues():retornaumarraydeobjetoscontendoositensselecionados.
VamosutilizaraclasseClientedefinidaabaixoparaadicionarnocomponenteJList.
Exemplo:Cliente.java
packagebr.com.globalcode.beans
publicclassCliente{
privateStringnome
privateintid
privateStringtelefone
publicCliente(Stringnome,intid,Stringtelefone){
this.setNome(nome)
this.setId(id)
this.setTelefone(telefone)
}
//Estamosomitindoosgettersesetters
publicStringtoString(){
return"["+id+"]"+nome
}
}
2InterfacesgrficascomJavaeNetBeans
Anotaes
4 42 2
Exemplo:TesteJList.java
packagebr.com.globalcode.swing
importjava.awt.*
importjava.util.Vector
importjavax.swing.*
importbr.com.globalcode.beans.Cliente
publicclassTesteJListextendsJFrame{
publicTesteJList(){
super("TesteJList")
setDefaultCloseOperation(EXIT_ON_CLOSE)
Containerc=getContentPane()
Vectorclientes=newVector()
Clientec1=newCliente("Waldir",1,"213213")
Clientec2=newCliente("AnaPaula",2,"1211213")
Clientec3=newCliente("Ricardo",3,"45454545")
clientes.add(c1)
clientes.add(c2)
clientes.add(c3)
JListlistClientes=newJList(clientes)
c.add(listClientes)
setSize(275,100)
show()
}
publicstaticvoidmain(Stringargs[]){
TesteJListt=newTesteJList()
}
}
TreinamentonaPlataformaNetBeans
Anotaes
4 43 3
2.2.6 ConstruindoMenus
javax.swing.JMenuBar
A classe JMenuBar representa uma barra de menu de um JFrame. Para associla a um JFrame, o mtodo
setJMenuBardaclasseJFramedeveserchamado,passandooprprioJMenuBarcomoparmetro.
Umabarrademenupodeteratalhosparaseusitens.CadamenupodeterumainstnciadeMenuShortcut.A
classeJMenuBarpossuidiversosmtodosparagerenciaratalhosdeteclado,semelhantementeaoqueexistea
classeJbutton.
javax.swing.JMenu
UmobjetodaclasseJMenurepresentaumitemdeumcomponentedemenu,alocadoemumabarra(JMenuBar).
javax.swing.JMenuItem
TodosositensdeummenudevempertencerclasseJMenuItemouumadesuassubclasses.
Exemplo:TesteJMenu.java
packagebr.com.globalcode.swing
importjavax.swing.*
publicclassTesteJMenuextendsJFrame{
publicTesteJMenu(){
super("TesteMenuGlobalcode!")
JMenuBarmenu=this.montaMenu()
setJMenuBar(menu)
setSize(250,150)
show()
}
publicJMenuBarmontaMenu(){
JMenuBarbarraMenu=newJMenuBar()
//MontandoomenuConta
JMenumenuConta=newJMenu("Conta")
JMenuItemitem1menuConta=newJMenuItem("NovaConta")
JMenuItemitem2menuConta=newJMenuItem("EditarConta")
JMenuItemitem3menuConta=newJMenuItem("ListarContas")
menuConta.add(item1menuConta)
menuConta.add(item2menuConta)
menuConta.add(item3menuConta)
2InterfacesgrficascomJavaeNetBeans
Anotaes
4 44 4
//MontandoomenuHelp
JMenumenuHelp=newJMenu("Help")
JMenuItemitem1menuHelp=newJMenuItem("GlobalcodeBankHelp")
JMenuItemitem2menuHelp=newJMenuItem("Problemascomuns")
JMenuItemitem3menuHelp=newJMenuItem("AjudaOnline")
menuHelp.add(item1menuHelp)
menuHelp.add(item2menuHelp)
menuHelp.add(item3menuHelp)
//AdicionandoosmenusContaeHelpabarradeMenus
barraMenu.add(menuConta)
barraMenu.add(menuHelp)
returnbarraMenu
}
publicstaticvoidmain(Stringargs[]){
TesteJMenut=newTesteJMenu()
}
}
MenuItem
MenuBar
Menu
TreinamentonaPlataformaNetBeans
Anotaes
4 45 5
2.3 GerenciadoresdeLayout
Paraorganizaodasdisposiesdoscomponentesdentrodasjanelas,contamoscomoconceitodeclassesde
Gerenciamento de Layouts. Para cada container (Panel/JPane, Dialog/JDialog, Frame/JFrame etc.)
podemosescolherumtipodeorganizadordelayoutdiferente,conformeanecessidade.
Para controlarmos o tamanho e posio dos nossos componentes utilizamos um dos mtodos a seguir:
setLocation,setSizeesetBounds.
Noentanto,comousodosgerenciadoresdelayout,estaremoscriandoumprogramadependentedeplataforma,
poiscadasistemaoperacionalpodetrabalharcomservidoresgrficosdiferentesqueterooutrasfontesdeletrae
noesdedimensionamento.
Osorganizadores(LayoutManager)ficaroresponsveispeloalinhamentoeposicionamentodoscomponentesna
interfacegrfica,podemoscontrolaroscomponentesmanualmente,eliminandoo:
JPanelp1=newJPanel()
p1.setLayout(null)
AscincoimplementaesdeLayoutManagerso:
FlowLayout
BorderLayout
GridLayout
CardLayout
GridBagLayout
OtipodefaultparaFrameeDialogBorderLayouteparaPaneleAppletFlowLayout.
Tambm possvel criarmos uma subclasse da interface LayoutManager para gerar nosso organizador de
layout.
2.3.1 java.awt.FlowLayout
QuandousamosoFlowLayoutoscomponentessoadicionadosdaesquerdaparaadireitadareadisponvel
dentrodocontainer.
Oalinhamentodefaultdentrodareacentralizado,sendopossvelmodificlo.
Algumasconstantesparaalinhamento
finalstaticintCENTER
finalstaticintLEFT
finalstaticintRIGHT
2InterfacesgrficascomJavaeNetBeans
Anotaes
4 46 6
Construtores
FlowLayout()
FlowLayout(intalign):Normalmenteutilizasealgumadasconstantesparaalinhamento
FlowLayout(intalign,inthgap,intvgap): Indica qual o tipo de alinhamento desejado alm
dosespaamentos(empixels)dotopodatela,tantoemtermosverticaiscomoemtermoshorizontais.
Exemplo:TesteFlowLayout.java
packagebr.com.globalcode.swing
importjava.awt.Container
importjava.awt.FlowLayout
importjavax.swing.*
importjavax.swing.JPanel
importjavax.swing.JButton
publicclassTesteFlowLayoutextendsJFrame{
publicTesteFlowLayout(){
super("TesteFlowLayoutGlobalcode!")
Containerc=getContentPane()
JPanelpBotoes=montaJPanelBotoes()
c.add(pBotoes)
setSize(275,100)
show()
}
publicJPanelmontaJPanelBotoes(){
JPanelp=newJPanel()
p.setLayout(newFlowLayout(FlowLayout.CENTER))
p.add(newJButton("Salvar"))
p.add(newJButton("Excluir"))
returnp
}
publicstaticvoidmain(Stringargs[]){
TesteFlowLayoutt=newTesteFlowLayout()
}
}
TreinamentonaPlataformaNetBeans
Anotaes
4 47 7
2.3.2 java.awt.GridLayout
Estegerenciadordelayoutdivideareadisponvelemlinhasecolunas,numesquemasemelhanteaumaplanilha
declculos.
Os componentes so adicionados da esquerda para direita e de cima para baixo, na ordem de chamada do
mtodoadd.
O nico inconveniente que todas as clulas tm o mesmo tamanho, ou seja, se quisermos adicionar um
pequeno texto e uma grande rea de texto, dentro do GridLayout, ambos tero o mesmo tamanho, como
poderemosobservarnoexemploabaixo.
Exemplo:TesteGridLayout.java
packagebr.com.globalcode.swing
importjava.awt.Container
importjava.awt.GridLayout
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.JTextField
importjavax.swing.JLabel
publicclassTesteGridLayoutextendsJFrame{
publicTesteGridLayout(){
super("TesteGridLayoutGlobalcode!")
Containerc=getContentPane()
JPanelpLogin=montaJPanelLogin()
c.add(pLogin)
this.setSize(400,150)
this.show()
}
publicJPanelmontaJPanelLogin(){
JPanelp=newJPanel()
JTextFieldtfNumeroConta=newJTextField("",10)
JTextFieldtfAgencia=newJTextField("",10)
JTextFieldtfBanco=newJTextField("",10)
JTextFieldtfLimite=newJTextField("",10)
JTextFieldtfCorrentista=newJTextField("",30)
p.setLayout(newGridLayout(5,2))
2InterfacesgrficascomJavaeNetBeans
Anotaes
4 48 8
p.add(newJLabel("Numerodaconta"))
p.add(tfNumeroConta)
p.add(newJLabel("Agencia"))
p.add(tfAgencia)
p.add(newJLabel("Banco"))
p.add(tfBanco)
p.add(newJLabel("Limite"))
p.add(tfLimite)
p.add(newJLabel("Correntista"))
p.add(tfCorrentista)
returnp
}
publicstaticvoidmain(Stringargs[]){
TesteGridLayoutt=newTesteGridLayout()
}
}
TreinamentonaPlataformaNetBeans
Anotaes
4 49 9
2.3.3 java.awt.BorderLayout
Organizadorpadroparaframesondeoscomponentessoadicionadosemcincoreasdeterminadasedefinidas
atravsdeconstantesnumricas:
finalstaticStringNORTH:NORTE
finalstaticStringSOUTH:SUL
finalstaticStringEAST:LESTE
finalstaticStringWEST:OESTE
finalstaticStringCENTER:CENTRO.
Construtores
BorderLayout()
BorderLayout(inthgap,intvgap).
Exemplo:TesteBorderLayout.java
packagebr.com.globalcode.swing
importjava.awt.BorderLayout
importjava.awt.FlowLayout
importjava.awt.Container
importjava.awt.GridLayout
importjavax.swing.*
publicclassTesteBorderLayoutextendsJFrame{
publicTesteBorderLayout(){
super("TesteBorderLayoutGlobalcode!")
Containerc=getContentPane()
setSize(400,200)
c.setLayout(newBorderLayout())
JPanelpBotoes=montaJPanelBotoes()
JPanelpLogin=montaJPanelLogin()
c.add(newJLabel("BorderLayoutnaposioNORTH"),BorderLayout.NORTH)
c.add(pBotoes,BorderLayout.SOUTH)
c.add(pLogin,BorderLayout.CENTER)
show()
}
2InterfacesgrficascomJavaeNetBeans
Anotaes
5 50 0
publicJPanelmontaJPanelBotoes(){
JPanelp=newJPanel()
p.setLayout(newFlowLayout(FlowLayout.CENTER))
JButtonbSalvar=newJButton("Salvar")
p.add(bSalvar)
JButtonbExcluir=newJButton("Excluir")
p.add(bExcluir)
returnp
}
publicJPanelmontaJPanelLogin(){
JPanelp=newJPanel()
p.setLayout(newGridLayout(5,2))
JTextFieldtfNumeroConta=newJTextField("",10)
JTextFieldtfAgencia=newJTextField("",10)
JTextFieldtfBanco=newJTextField("",10)
JTextFieldtfLimite=newJTextField("",10)
JTextFieldtfCorrentista=newJTextField("",30)
p.add(newJLabel("Numerodaconta"))
p.add(tfNumeroConta)
p.add(newJLabel("Agencia"))
p.add(tfAgencia)
p.add(newJLabel("Banco"))
p.add(tfBanco)
p.add(newJLabel("Limite"))
p.add(tfLimite)
p.add(newJLabel("Correntista"))
p.add(tfCorrentista)
returnp
}
publicstaticvoidmain(Stringargs[]){
TesteBorderLayoutt=newTesteBorderLayout()
}
}
TreinamentonaPlataformaNetBeans
Anotaes
5 51 1
2.3.4 FreeLayout
ONetBeans5ganhoudiversasfacilidadesadicionaisparaodesenvolvimentodeumainterfacegrfica.Umadas
questespolmicasdaAPISwingsoosgerenciadoresdelayout,poisaomesmotempoquetrazemindiscutveis
benefcios para o desenvolvimentomultiplataforma, acabou tornando o desenvolvimento de uma tela um pouco
burocrtico.
O NetBeans 4 j contava com um recurso chamadoGridBagLayoutEditor quefacilita bastante as configuraes
daquela dzia de parmetros de dimensionamento, margem, mescla de clulas etc. O que dizem que
GridBagLayoutfcil,depoisquevocaprende...ErealmenteumatelabemfeitacomGridBagLayoutconquista
umusurio.
AgoraparaficarmaisfcilaindaogrupoNetBeansdesenvolveuoMatisse,quecontacomumnovoorganizador
de layout, ainda especfico do NetBeans porm ser agregado na plataforma padro no futuro. Tratase do
FreeLayout,umgerenciadorquepermitequevocdesenvolvaumatelacommoslivres,comoNullLaytouteo
gerenciador vai te ajudando com recursos do tipo SnapToGrid, sugerindo a posio ideal do componente,
seguindomelhoresprticasepadrodedesenvolvimentodetelascomsemnticaamplamenteaceita.
2InterfacesgrficascomJavaeNetBeans
Anotaes
5 52 2
2.4 Eventos
Eventos so aes que um usurio executa na interface grfica. Temos 3 componentes muito importantes no
tratamentodeeventos:
oobjetoquerepresentaoevento
ogeradordoevento
aquelequetrataoeventogerado.
Vejamosadescrioabaixo:
1.Events
Objeto que descreve o evento gerado. Por exemplo, um click de mouse, uma tecla pressionada, ou uma
minimizaodeumajanela.
Existemdiversostiposdeeventosvejaalgunsexemplos:
MouseEvent:eventosdemouse
KeyEvent:eventosdeteclado
WindowEvent:eventosdejanela
DiagramaUMLrepresentandoahierarquiadealgumasclassesquerepresentameventos:
TreinamentonaPlataformaNetBeans
Anotaes
5 53 3
2.EventSources
Geradordoevento:botes,comboboxes,janelas,listas,entreoutros.
3.EventHandlers
Mtodosquerecebemumobjetoeventoeexecutamasfuncionalidadesdefinidaspeloevento.Normalmenteso
programadosdentrodeclasseschamadaslisteners.
Todo evento enviado para o componente o que gerou, mas cada componente pode propaglo para uma ou
maisclassesregistradascomoListeners.
2InterfacesgrficascomJavaeNetBeans
Anotaes
5 54 4
2.4.1 Listeners
Listenerscontmeventhandlers(mtodos)querecebemeprocessamoevento.Destamaneira,ogerenciadorde
eventospodeserumobjetoseparadodocomponente.
Geralmente, listeners so criados implementando interfaces. Por exemplo, se quisermos criar um listener para
ouvir eventos de mouse (MouseEvent), devemos criar uma classe que implemente a interface
MouseListener.Analogamentehdiversasinterfacesqueespecificamlisteners.
Vejamosalgunsexemplos:
MouseListener
KeyListener
WindowListener
ActionListener.
Cadacomponentepodedisparareventosdeumaoumaisinterfaces.
Hierarquiadealgumasinterfacesquerepresentamlisteners:
AclasseComponent,superclassedepraticamentetodososcomponentesAWTeSwing,definediversosmtodos
para associar um listener ao nosso componente, possibilitando programar a tarefa que dever ser realizada
quandooseventosesperadosacontecerem.
TreinamentonaPlataformaNetBeans
Anotaes
5 55 5
AlgunsmtodosdefinidospelaclasseComponentso:
addKeyListener(KeyListener listener): mtodo para associar um KeyListener a um
componente
addMouseListener(MouseListenerlistener): mtodo para associar um MouseListener a um
componente.
AlgunsmtodosdaclasseAbstractButton,queasuperclassedeJButtoneJMenuItem
addActionListener(ActionListenerlistener): mtodo para adicionar um ActionListener a
umJButtonouJMenuItem(ouqualqueroutraclassederivadadeAbstractButton).
addItemListener(ItemListener listener): mtodo para associar um ItemListener para um
JButtonouJMenu(ouqualqueroutraclassederivadadeAbstractButton).
Imprimirumtextonaconsolequandoumbotoforclicado:
Instancia um objeto cuja classe implementa MouseListener, que a interface que especifica os
eventos de mouse, no mtodo adequado iremos programar a impresso na console, que no nosso
casoaoperaodesejada.
Instanciarumobjetodestaclasse.
Associaresteobjetoaoboto.
Quandoumusurioclicaemumbotocomomouse,omtodorespectivodeMouseListenerserexecutado.
Aimplementaodestainterfacepodeocorrerdediversasformas,comosesegue.
2InterfacesgrficascomJavaeNetBeans
Anotaes
5 56 6
2.4.2 Umaclasseexternai mpl ementaainterface j ava.awt.XXXLi stener
TemosdiversastcnicasdeorientaoaobjetosnoJavaparaimplementarmosinterfaceseclassesdeeventos.
UmadelasquandoainterfacelistenerimplementadaporumaclasseindependentedoJFrame.
NesteexemploveremosainterfaceMouseListener,quecontmcincomtodos:
publicvoidmousePressed(MouseEvente)
publicvoidmouseReleased(MouseEvente)
publicvoidmouseEntered(MouseEvente)
publicvoidmouseExited(MouseEvente)
publicvoidmouseClicked(MouseEvente)
Noexemploabaixo,criamosumaclassechamadaEventosMousequeimplementatodososmtodosdainterface
MouseListener.
A implementao bem simples e apenas imprime uma mensagem na console atravs da chamada ao
System.out.println().
Depois disto, associaremos uma instncia de EventosMouse ao boto cujos cliques queremos monitorar ou
reagir.
Exemplo:EventosMouse.java
packagebr.com.globalcode.gui.eventos
importjava.awt.event.MouseEvent
importjava.awt.event.MouseListener
publicclassEventosMouseimplementsMouseListener{
/***********************************************************************
*Implementamos,namesmaclasse,osmetodosdainterfaceMouseListener
***********************************************************************/
publicvoidmousePressed(MouseEvente){
System.out.println("MousePressed")
}
publicvoidmouseReleased(MouseEvente){
System.out.println("mouseReleased")
}
publicvoidmouseEntered(MouseEvente){
System.out.println("mouseEntered")
}
publicvoidmouseExited(MouseEvente){
System.out.println("mouseExited")
}
publicvoidmouseClicked(MouseEvente){
System.out.println("mouseClicked")
}
}
TreinamentonaPlataformaNetBeans
Anotaes
5 57 7
Apresentamos agora a classe TesteMouseListener, que tem um JPanel com um boto. O objetivo
monitorar todos os eventos possveis que so gerados com o mouse sobre o boto, assim associaremos um
MouseListener ao boto, (implementao da interface MouseListener) que uma instncia da classe
EventosMouse.
Exemplo:TesteMouseListener.java
packagebr.com.globalcode.swing
importjava.awt.Container
importjavax.swing.JButton
importjavax.swing.JFrame
importjavax.swing.JPanel
importbr.com.globalcode.gui.eventos.*
publicclassTesteMouseListenerextends
JFrame{
publicTesteMouseListener(String
tituloJanela){
super(tituloJanela)
Containerc=getContentPane()
JPanelp1=newJPanel()
JButtonb1=newJButton("Boto1")
p1.add(b1)
c.add(p1)
EventosMouselistener=newEventosMouse()
b1.addMouseListener(listener)
setSize(200,200)
show()
}
publicstaticvoidmain(Stringargs[]){
TesteMouseListenerframe=newTesteMouseListener("TesteMouseListener")
}
}
OsmtodosdoEventosMousesoexecutadosnosseguintescasos:
mouseEntered:quandoomousepassasobreodesenhodoboto
mousePresed:quandopressionamosobotodomousesobreoJButton
mouseChecked: quando pressionamos e soltamos um dos botes do mouse rapidamente sobre o
JButton
mouseRelease:quandosoltamosobotodomouseforadoJButton.
2InterfacesgrficascomJavaeNetBeans
Anotaes
5 58 8
2.4.3 Aprpri acl assei mpl ementaainterface java.awt.event.XXXListener
TambmpodemosfazercomqueaprpriaclassequeestendeJFrameimplementeainterfaceMouseListener,
ouqualqueroutroXXXListener.
Noexemploanterior,nohouvemanipulaodeoutroscomponentesdopainel,noentanto,podesernecessrio
leroualterarvaloresdecaixasdetexto,botes,listaseoutroscomponentes.Nestecaso,importantedeixaros
componentes a serem manipulados como atributos da classe, para que estejam acessveis no mtodo que ir
manipullos,enocomovariveislocaisdeclaradasnosmtodos.
O exemplo abaixo uma continuao do exemplo anterior, mas agora adicionamos um JLabel contendo um
textoqueirsermodificadodeacordocomoseventosdomousesobreoboto.
AgoranosmtodoscomomouseClicked,mouseReleased,vamosalterarovalordolabel lTexto,quecomo
foideclaradocomoatributodaclasse.
Exemplo:TesteMouseListener2.javaalterandocomponentesdoJPanel
packagebr.com.globalcode.swing
importjava.awt.Container
importjava.awt.event.MouseEvent
importjava.awt.event.MouseListener
importjavax.swing.JButton
importjavax.swing.JFrame
importjavax.swing.JLabel
importjavax.swing.JPanel
publicclassTesteMouseListener2extendsJFrameimplementsMouseListener{
privateJLabellTexto=newJLabel("Textoinicial")
publicTesteMouseListener2(StringtituloJanela){
super(tituloJanela)
Containerc=getContentPane()
JPanelp1=newJPanel()
JButtonb1=newJButton("Boto1")
p1.add(b1)
p1.add(lTexto)
c.add(p1)
//thispoisainterfaceestaimplementadaaquimesmo
b1.addMouseListener(this)
setSize(200,200)
show()
}
TreinamentonaPlataformaNetBeans
Anotaes
5 59 9
/***********************************************************************
*Implementamos,namesmaclasse,osmetodosdainterfaceMouseListener
***********************************************************************/
publicvoidmousePressed(MouseEvente){
lTexto.setText("MousePressed")
System.out.println("MousePressed")
}
publicvoidmouseReleased(MouseEvente){
lTexto.setText("mouseReleased")
System.out.println("mouseReleased")
}
publicvoidmouseEntered(MouseEvente){
lTexto.setText("mouseEntered")
System.out.println("mouseEntered")
}
publicvoidmouseExited(MouseEvente){
lTexto.setText("mouseExited")
System.out.println("mouseExited")
}
publicvoidmouseClicked(MouseEvente){
lTexto.setText("mouseClicked")
System.out.println("mouseClicked")
}
publicstaticvoidmain(Stringargs[]){
TesteMouseListener2frame=newTesteMouseListener2("TesteMouseListener")
}
}
2InterfacesgrficascomJavaeNetBeans
Anotaes
6 60 0
2.4.4 Impl ementandoo listenercomoumacl assei nterna(Innerclass)
OutraabordagembastantecomumautilizaodeInnerclasses,ouseja,classesdeclaradasdentrodaprpria
classe.
Aclasseinterna(innerclass)temacessoirrestritoatodososatributosdaclassequeacontm,chamadaclasse
externa(Outerclass).
Sintaxe
classExemploInnerClass{
classInnerClass{
}
}
Agora criaremos uma inner class para a classe TesteMouseListener mas, ao invs de implementarmos
diretamenteainterfaceMouseListener,estenderemosaclasseMouseAdapterque,porsuavez,implementa
a interface MouseListener. Desta forma, no precisamos implementar todos os mtodos em branco,
sobrescrevendoapenasosmtodosdesejados.
Exemplo:TesteMouseListener3.java
packagebr.com.globalcode.swing
importjava.awt.Container
importjava.awt.event.MouseAdapter
importjava.awt.event.MouseEvent
importjavax.swing.JButton
importjavax.swing.JFrame
importjavax.swing.JLabel
importjavax.swing.JPanel
publicclassTesteMouseListener3extendsJFrame{
privateJLabellTexto=newJLabel("Textoinicial")
publicTesteMouseListener3(StringtituloJanela){
super(tituloJanela)
Containerc=getContentPane()
JPanelp1=newJPanel()
JButtonb1=newJButton("Boto1")
p1.add(b1)
p1.add(lTexto)
c.add(p1)
EventosMouselistener=newEventosMouse()
b1.addMouseListener(listener)
setSize(200,200)
TreinamentonaPlataformaNetBeans
Anotaes
6 61 1
show()
}
/***********************************************************************
*EstendemosMouseAdapteredestaformanaoenecessarioimplementarmos
*todososseusmetodos,apenassobrescrevemososnecessarios.
***********************************************************************/
publicclassEventosMouseextendsMouseAdapter{
publicvoidmouseClicked(MouseEvente){
lTexto.setText("mouseClicked")
System.out.println("mouseClicked")
}
}
publicstaticvoidmain(Stringargs[]){
TesteMouseListener3frame=newTesteMouseListener3("TesteMouseListener")
}
}
2.4.5 Impl ementandoolistenercomoumacl asseannima
Outrapossvelestratgiaparaimplementaodelistenersautilizaodeclassesannimas,quenopossuem
umnomeesointeiramentedeclaradasdentrodapassagemdeparmetrodomtodoaddXXXListener.
ExemplodeClasseAnnima:
addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente){
lTexto.setText("mouseClicked")
System.out.println("mouseClicked")
}
}
)
Exemplo: TesteMouseListener4.java
packagebr.com.globalcode.swing
importjava.awt.Container
importjava.awt.event.MouseAdapter
importjava.awt.event.MouseEvent
importjavax.swing.JButton
importjavax.swing.JFrame
importjavax.swing.JLabel
importjavax.swing.JPanel
publicclassTesteMouseListener4extendsJFrame{
privateJLabellTexto=newJLabel("Textoinicial")
publicTesteMouseListener4(StringtituloJanela){
super(tituloJanela)
Containerc=getContentPane()
2InterfacesgrficascomJavaeNetBeans
Anotaes
6 62 2
JPanelp1=newJPanel()
JButtonb1=newJButton("Boto1")
p1.add(b1)
p1.add(lTexto)
c.add(p1)
b1.addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente){
lTexto.setText("mouseClickedINNER")
System.out.println("mouseClickedINNER")
}
})
setSize(200,200)
show()
}
publicstaticvoidmain(Stringargs[]){
TesteMouseListener4frame=newTesteMouseListener4("TesteMouseListener")
}
}
TreinamentonaPlataformaNetBeans
Anotaes
6 63 3
2.4.6 Ainterface java.awt.event.Acti onLi stener
Alguns objetos no so sensveis a aes do mouse atravs de MouseListeners, como o caso de
JComboBox.NestassituaesutilizaseainterfaceActionListener(maisgenrica)equerespondeaeventos
atravsdeumnicomtodo:actionPerformed.
A interface ActionListener tambm responde a eventos como ALT+tecla de atalho nos botes que,
evidentemente,nosogerenciadosatravsdoMouseListener.
VejaumexemplodeutilizaodeActionListeneraseguir,ondequeremosque,aoselecionarmosumbanco,
seunomeapareanoJTextField.
Exemplo:TesteEventosJComboBox.java
packagebr.com.globalcode.swing
importjava.awt.*
importjava.awt.event.ActionEvent
importjava.awt.event.ActionListener
importjavax.swing.*
publicclassTesteEventosJComboBoxextendsJFrame{
//oseletorBancosseramanipuladonohandleractionPerfomedeporistoe
//necessariodeclaralocomoatributodaclasse.
privateJComboBoxseletorBancos=newJComboBox()
privateJTextFieldtfBanco=newJTextField()
publicstaticvoidmain(Stringargs[]){
TesteEventosJComboBoxt=newTesteEventosJComboBox()
}
publicTesteEventosJComboBox(){
super("TesteEventosJComboBox")
setDefaultCloseOperation(EXIT_ON_CLOSE)
Containerc=getContentPane()
c.setLayout(newGridLayout(2,1))
seletorBancos.addItem("Itau")
seletorBancos.addItem("Bradesco")
seletorBancos.addItem("GlobalcodeBank")
seletorBancos.addActionListener(newSeletorBancosHandler())
c.add(seletorBancos)
c.add(tfBanco)
setSize(275,100)
show()
}
2InterfacesgrficascomJavaeNetBeans
Anotaes
6 64 4
classSeletorBancosHandlerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
System.out.println("Itemselecionado:"+seletorBancos.getSelectedItem())
tfBanco.setText(seletorBancos.getSelectedItem().toString())
}
}
}
Emseguida,umexemplodeutilizaodeActionListener,ondeomtodoactionPerformedserexecutado
quando um boto for ativado pelo atalho configurado, ou ento, selecionando o boto atravs da utilizao da
tecla<TAB>epressionadocomatecla<ESPAO>.
Exemplo:TesteEventosJButton.java
packagebr.com.globalcode.swing
importjava.awt.*
importjava.awt.event.*
importjavax.swing.*
publicclassTesteEventosJButtonextendsJFrame{
privateJButtonbotao1=newJButton("botao1")
privateJButtonbotao2=newJButton("botao2")
privateJLabellTexto=newJLabel("ao")
publicTesteEventosJButton(){
super("TesteEventosJComboBox")
setDefaultCloseOperation(EXIT_ON_CLOSE)
Containerc=getContentPane()
c.setLayout(newGridLayout(3,1))
botao1.setMnemonic(KeyEvent.VK_1)
botao2.setMnemonic(KeyEvent.VK_2)
botao1.addActionListener(newBotaoHandler())
botao2.addActionListener(newBotaoHandler())
c.add(botao1,BorderLayout.NORTH)
c.add(lTexto,BorderLayout.CENTER)
c.add(botao2,BorderLayout.SOUTH)
setSize(275,100)
show()
TreinamentonaPlataformaNetBeans
Anotaes
6 65 5
}
classBotaoHandlerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
System.out.println("Botaoativado:"+e.getActionCommand())
lTexto.setText("Botaoativado:"+e.getActionCommand())
}
}
publicstaticvoidmain(Stringargs[]){
TesteEventosJButtont=newTesteEventosJButton()
}
}
2InterfacesgrficascomJavaeNetBeans
Anotaes
6 66 6
2.5 Componentesavanados
Neste tpico, iremos estudar alguns componentes avanados de Swing bastante interessantes. Contudo, no
detalharemossobrecadaumdelesfocandoapenasemmostrarasuautilizao.
2.5.1 Aclasse javax.swing.JFi leChooser
Estecomponenteutilizadoparaabrirumajaneladeseleodearquivos.Existemdiversasconstantesdaclasse,
quedevemserutilizadasparaobterasoperaesrealizadaspelousurioparaconfigurarocomponente.
Exemplo:TesteFileChooser.java
packagebr.com.globalcode.swing.components
importjava.awt.*
importjava.awt.event.*
importjavax.swing.*
publicclassTesteFileChooserextendsJFrame{
privateJFileChooserfileChooser=newJFileChooser()
privateJButtonbotaoOk=newJButton("Escolher")
privateJLabellNomeArquivo=newJLabel("")
privateJFrameeu=this
publicTesteFileChooser(){
super("TesteFileChooser")
setDefaultCloseOperation(EXIT_ON_CLOSE)
Containerc=getContentPane()
c.setLayout(newGridLayout(3,1))
Stringmsg="Cliquenobotaoparaescolherumarquivo"
JLabellDigiteNomeArquivo=newJLabel(msg)
c.add(lDigiteNomeArquivo)
c.add(botaoOk)
c.add(lNomeArquivo)
botaoOk.addActionListener(newAbrirArquivoHandler())
setSize(250,100)
show()
}
classAbrirArquivoHandlerimplementsActionListener{
TreinamentonaPlataformaNetBeans
Anotaes
6 67 7
publicvoidactionPerformed(ActionEvente){
//Indicaqueajaneladeescolhadearquivoseraaberta
intopcao=fileChooser.showOpenDialog(eu)
//SeaopcaoforOPEN
if(opcao==JFileChooser.APPROVE_OPTION){
StringarquivoSelecionado=fileChooser.getSelectedFile().getName()
lNomeArquivo.setText(arquivoSelecionado)
}
//SeaopcaoforCANCEL
elseif(opcao==JFileChooser.CANCEL_OPTION){
lNomeArquivo.setText("Operaocancelada")
}
}
}
publicstaticvoidmain(Stringargs[]){
TesteFileChoosert=newTesteFileChooser()
}
}
2InterfacesgrficascomJavaeNetBeans
Anotaes
6 68 8
2.5.2 javax.swing.JTabbedPane
packagebr.com.globalcode.swing.components
importjava.awt.event.KeyEvent
importjavax.swing.*
publicclassTesteTabbedPaneextendsJFrame{
publicTesteTabbedPane(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
JTabbedPanetabbedPane=newJTabbedPane()
JPanelpanel1=newJPanel()
panel1.add(newJLabel("Panel1"))
JPanelpanel2=newJPanel()
panel2.add(newJLabel("Panel2"))
JPanelpanel3=newJPanel()
panel3.add(newJLabel("Panel3"))
JPanelpanel4=newJPanel()
panel4.add(newJLabel("Panel4"))
tabbedPane.addTab("Tab1",panel1)
tabbedPane.setMnemonicAt(0,KeyEvent.VK_1)
tabbedPane.addTab("Tab2",panel2)
tabbedPane.setMnemonicAt(1,KeyEvent.VK_2)
tabbedPane.addTab("Tab3",panel3)
tabbedPane.setMnemonicAt(2,KeyEvent.VK_3)
tabbedPane.addTab("Tab4",panel4)
tabbedPane.setMnemonicAt(3,KeyEvent.VK_4)
this.getContentPane().add(tabbedPane)
this.setSize(300,300)
this.show()
}
publicstaticvoidmain(String[]args){
TesteTabbedPanetp=newTesteTabbedPane()
}
}
TreinamentonaPlataformaNetBeans
Anotaes
6 69 9
2.5.3 javax.swing.JTree
Estecomponenteutilizadopararepresentarumaestruturanaformadervore.Cadandarvore,sejaumn
ouumaramificao,representadoporumobjetodaclasseDefaultMutableTreeNode.
Exemplo:br.com.globalcode.swing.components.TesteJTree
packagebr.com.globalcode.swing.components
importjavax.swing.*
importjavax.swing.event.*
importjavax.swing.tree.DefaultMutableTreeNode
publicclassTesteJTreeextendsJFrame{
privateJTreetree=null
publicTesteJTree(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
DefaultMutableTreeNodeturmas=newDefaultMutableTreeNode("Turmas")
tree=newJTree(turmas)
DefaultMutableTreeNodeturma1=newDefaultMutableTreeNode("Turma1")
DefaultMutableTreeNodealuno1=newDefaultMutableTreeNode("Aluno1")
DefaultMutableTreeNodealuno2=newDefaultMutableTreeNode("Aluno2")
DefaultMutableTreeNodeturma2=newDefaultMutableTreeNode("Turma2")
DefaultMutableTreeNodealuna1=newDefaultMutableTreeNode("Aluna1")
turmas.add(turma1)
turma1.add(aluno1)
turma1.add(aluno2)
turmas.add(turma2)
turma2.add(aluna1)
tree.addTreeSelectionListener(newTreeHandler())
getContentPane().add(tree)
setSize(300,300)
show()
}
classTreeHandlerimplementsTreeSelectionListener{
publicvoidvalueChanged(TreeSelectionEvente){
DefaultMutableTreeNodenode=(DefaultMutableTreeNode)tree
.getLastSelectedPathComponent()
System.out.println("Elementoselecionado"+node.toString())
}
}
publicstaticvoidmain(String[]args){
TesteJTreetp=newTesteJTree()
}
}