Logo Passei Direto
Buscar

8-output

User badge image
Filipe Xavier

em

Ferramentas de estudo

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

E-Book - Apostila
8-Um trato no look do soRware (DL)
E-Book - Apostila
Esse arquivoé uma versão estática. Para melhor experiência, acesse esse conteúdo pela m ídia interativa.
E-Book - Apostila
rato
soÜwa
Nessa unidade vamos estudar como estruturar interfaces visandoa usabilidade por parte dos
usuários dos sistemas que vamos desenvolver. Antes de tudo, vamos acompanharo casoa seguir.
Reflexão
Alan havia crescido na carreira como programadore estava se tornando um verdadeiro
especialista no desenvolvimento de soluções computacionais. Suas competências se
desenvolveram de forma notável,e ele já estava utilizando padrões de projetose boas
práticas de desenvolvimento com maestria. Seus códigos eram otimizadose organizados,
o que facilitavao trabalho em equipe. Tudo estava indo muito bem.
Em um novo projeto de software, Alan contava com uma pequena equipe, somente com
desenvolvedores. Para ele não foi um problema, pois conseguiu implementar muito bem
a soluçãoe entregá-la parao cliente. Após alguns meses de usodo sistema, Alan ficou
extremamente frustrado ao descobrir queo cliente estava insatisfeito com o uso do
software. Apesar do programa serrápido, estávele funcional, sua usabilidade estava
muito comprometida, pois não foram observados os mínimos critérios de uma interação
facilitada com o sistema. Mesmo nãosendo especialista em interfaces, Alan percebeu que
precisaria se preocupar minimamente com essa parte da solução, com o objetivo de não
comprometero projeto.
2-23
E-Book - Apostila
Ao final deste conteúdo, você será capaz de:
• Conhecer bibliotecas para implementação de interfaces gráficas em
soluções computacionais;
• Diferenciar os tipos de tratamentos de eventos;
• Avaliara necessidade da utilização de padrões de projeto comoo MVC.
Um dos aspectos mais importantes de um sistema computacional que possui interação com o
usuárioé a boa qualidade de seus componentes visuais. Bons exemplos para isso são os aplicativos
que podemos obter das lojas virtuais para nossos dispositivos móveis. Independentemente da
qualidadee do número de funcionalidades que um deles ofereça,a probabilidade deo usuário
gostare mantê-lo instaladoé muito baixa, casoa sua interface gráfica não cause boa impressãoe
facilitea interaçãoe acesso às funcionalidades.
3 - 23
E-Book - Apostila
Nesta unidade, estudaremos sobre os principais componentes visuais paraa construção de
interfaces gráficas de qualidadee como eles podem serutilizados para garantir alto nível de
usabilidade.
FIGURA1 - Interface gráfica confusa
4-23
ELABORAÇÃO DO AUTOR, 2020.
E-Book - Apostila
FIGURA2 - Interface gráfica organizada
5- 23
ELABORAÇÄO DO AUTOR, 2020.
Hello, world!
E-Book - Apostila
6 - 23
E-Book - Apostila
O pacote javax.swinge seus subpacotes possuem classes úteis paraa criação de interfaces gráficas
parao usuário (GUI: Graphical User Interface).A criação de uma interface gráfica (uma tela) envolve
o uso da classe JFrame, que fazparte dele.A palavra frame significa moldura.A ideiaé
construirmos uma moldura e, então, adicionarmos conteúdoa ela, como botões, campos textuais,
tabelas, menus etc. Um JFrame possui um painel de conteúdo (doinglês content pane). Trata-se
de um objeto capaz de armazenar outros objetos. Não adicionamos conteúdo diretamentea um
JFrame. Uma vez que tenhamos um JFrame em mãos, obtemos uma referência ao seu painel de
conteúdoe adicionamos conteúdoa ele.
Tradicionalmente, quando aprendemos uma nova tecnologia, linguagem, framework etc.,
começamos osestudos por meio da implementação de um aplicativo "Hello, World" que, em geral,
é um exemplo minimal que ilustrao que é possível fazer com aquele conteúdo sob estudo.
Veja,a seguir, os nomes de algumas classes que representam componentes visuais.
TABELA1 - Componentes visuais do pacote javax.swing
Nome daclasse
JLabel
JTextField
JButton
ELABORAÇÃO DO AUTOR, 2020.
Finalidade
Exibir texto não editável pelo usuário.
Exibir uma caixa textual ondeo usuário possa inserir conteúdo.
Exibir um botão.
O seguinte programaé um "Hello, World" feito, utilizando classes do pacote javax.swing.
7 - 23
Estudo Guiado
E-Book - Apostila
public class HelloSwingTela{
public static void criarTela() {
JFrame tela = new JFrame ('Hello, Swing!! ! ');
tela.setDefaultClose0peration(JFrame.EXIT ON CLOSE);
//const roi us J Label
J Label he11o SwingLabe\. = new J Label (' He1 \.o, Swing! ! ! ! ! ! ! ' ) ;
//obtem o painel de conteúdo
Container painelDeConteudo = tela.getConteúdoPane ();
//adiciona o JLabel ao painel de conteúdo
painelDeConteudo.add(helloSwingLabel);
//ajusta largura e altura da tela conforme seu conteúdo
tela. pack();
//to rnaa tela vis ive\.
tela.setVisible(true);
public static void main(String[] args) {
SWingUtilities.invokeLater(() ->{
criarTela();
i)i
8 - 23
public	class	HelloSwingTela{
public	static	void	criarTela()	{
JFrame	tela	=	new	JFrame	('Hello,	Swing!!!');
tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//constroi	um	JLabel
JLabel	helloSwingLabel	=	new	JLabel	('Hello,	Swing!!!!!!!');
//obtem	o	painel	de	conteúdo
Container	painelDeConteudo	=	tela.getConteúdoPane();
//adiciona	o	JLabel	ao	painel	de	conteúdo
painelDeConteudo.add(helloSwingLabel);
	
//ajusta	largura	e	altura	da	tela	conforme	seu	conteúdo
tela.pack();
//torna	a	tela	visível
tela.setVisible(true);
}
	
public	static	void	main(String[]	args)	{
SwingUtilities.invokeLater(()	->	{
criarTela();
});
}
}
E-Book - Apostila
Leiaa página 304 atéa 306 para conhecer um pouco mais sobrea
estrutura básica do pacote javax.swing.
Cl1que no linke leiao livro
DEITEL, P.; DEITEL, H.J ava: como programar. 10.ed. São Paulo: Pearson, 2017.
Saiba Mais
O método invokeLateré utilizado para especificarmos uma atividadea ser executada por
um fluxo independente do principal, que funciona em paralelo com ele. lsso ocorre por
diferentes razões. Uma delasé o fato de não querermos congelara interface gráfica com o
usuário, caso elesolicitea execução de alguma funcionalidade que eventualmente
demore para terminar. Além disso,o swing (assim comoa maioria dos toolkits de interface
gráfica)é single threaded, isto é, somente um fluxo de execução pode tocar nos
componentes visuais,e ele deve seracessado pelo método invokeLater.
Tratamento de eventos
Quandoo usuário interage com um componente visual dizemos que um evento acontece. Um
clique no botão, um caractere digitado em um campo textual, uma opção selecionada em um menu
sãotodos exemplos de eventos.O framework Swing utilizao padrão de projeto chamado Observer
para fazero tratamento de eventos.O tratamento de um evento consiste em especificar uma ação
que deve serrealizada quando eleocorrer. Por exemplo, quando um professor que utiliza um
sistema acadêmico clica um botão para salvar as notas que acabou de digitar,a açãoa serrealizada
é o armazenamento delas no banco de dados do sistema.
9-23
https://plataforma.bvirtual.com.br/Acervo/Publicacao/39590
E-Book - Apostila
O padrão de projeto Observer consiste essencialmente em duas partes: um objeto Observablee
um objeto Observer.O primeiroé quem dáorigem aos eventos. No exemplo do sistema acadêmico,
o botão queo professor usa para enviar as notasé um Observable. Cabe ao desenvolvedor do
sistema especificar um objeto que desempenharáo papel de Observer. Eleé notificado toda vez
queo evento acontece (obotãoé clicado, nesse caso)e executa um método previamente definido.
A Figura3 ilustra como Observablee Observer conversam diretamente.
FIGURA3 - Observablee Observer
ELABORAÇÃO DO AUTOR, 2010.
10 - 23
E-Book - Apostila
Saiba Mais
A notação() ->()é chamada de expressão lambda. Trata-se de um recurso disponível na
linguagem Java desdea sua versão 8. Uma expressão lambdaé usada como
implementação de uma interface, desde que elapossua um único método. Interfaces que
possuem um único método sãochamadas de funcionais no Java 8. Eventualmente,
interfaces com mais de um método também podemserimplementadas utilizando-se uma
expressão lambda. Porém, isso somente pode acontecer nos casos em quea interface
possui um único método abstrato, sem implementaçãoe todos os outros possuem
implementação padrão (são marcados como modificador default).
Todoo padrão de projeto possui um diagrama de classes que exibea sua estrutura geral.A
estrutura do padrão Observeré exibida na Figura 4.
FIGURA4 - Diagrama de classes do padrão de projeto Observer
ELABORAÇÃO DO AUTOR, 2020.
11-23
Diagrama de classes do pad rão de projetoO bserver exibe uma interface chamada Subject
(ela fazo papel de Observable)e possui os métodos add, removee notifyobservers.H á
uma interface chamada0 bserver cujoú nico método sechama update. ConcreteSubjecté
uma classe concreta que imp îementa Subject.C oncreteo bserveré uma classe conereta
que implementaO bserver. Subject possui um relacionamento TEM-UM comO bserver.
Eventualmente,C oncreteo bserver pode terum relacio namento TEM-UM com
ConcreteSubject.
E-Book - Apostila
Um padrão de projeto (do inglês Design Pattern)é uma solução amplamente conhecidae
genéricao suficiente para que possa seraplicadaa diversos problemas, mesmo queeles
pertençama domínios diferentes.A sua existência tem décadas, porém eles foram
primeiramente documentados, de fato, em um livro que hojeé conhecido como TheGang of
Four.O padrão de projeto Observer, por exemplo,é aplicado para tratar eventos, como clicar
botões, alterações de localização detectadas por sensores de GPS, dispositivos móveis quando
detectam novas redes Bluetooth, toques na tela realizados por um usuário do Google Maps,a
fim de escolher um destinoe muitos outros exemplos.O MVC (Model View Controller)é um
padrão composto cuja implementação pode serfeita de diferentes formas. Uma delas envolvea
aplicação doO bserver. Em alguns casos, os componentes visuais são registrados como
observadores do modelo que têm como responsabilidade notificá-los quando alterações de
interesse aconteçam.
O aplicativo construído,a seguir, ilustrao uso de componentes visuais,e o tratamento do eventoé
realizado utilizandoo padrão de projeto Observer.O usuário pode utilizá-lo para fazera conversão
de unidades de medida de temperaturas.
public class ConversorDeTemperatura {
public static void criarTela(){
JFrame tela = new JFrame ('Conversor');
JTextField celsi usTextField = new 3TextField ( 1õ);
JLabel celsiusLabel = new JLabel ('\u00B0C');
JButton convertButton = new JButton ('Converter');
12-23
public	class	ConversorDeTemperatura	{
	
public	static	void	criarTela(){
JFrame	tela	=	new	JFrame	('Conversor');
JTextField	celsiusTextField	=	new	JTextField	(10);
JLabel	celsiusLabel	=	new	JLabel	('\u00B0C');
JButton	convertButton	=	new	JButton	('Converter');
E-Book - Apostila
JLabel valorConvertidoLabel = new JLabel (");
Container painelDeConteudo = tela.getConteñdoPane();
painelDeConteudo.setLayout (new GridLayout (2, 4, 2, 4));
painelDeConteudo. add( ce1si usTextField);
painelDeConteudo. add( ce1si usLabel);
painelDeConteudo. add( convertButI on);
painelDeConteudo. add(valo rConve rtidoLabel);
convertButton.addActionListener((e) ->{
double celsius = Double.parseDouble(
ce{siusTextField.getText()
double fahrenheit = celsius / 5 * 9 + 32;
valorConvertidoLabel.setText(
String.format('%.2f\u00B0F', fahrenheit)
//aj usta largura e altura de acordo como conteñdo
tela.pack();
//centraliza
tela.setLocationRelativeTo(null);
//altera comportamento padrâo do botâo fechar
I eta . setDefauIt CIo se0peration(J Frame. EXIT 0N CLOSE);
//torna a tela visivel
tela. setVisible (Irue);
public static void main (String[] args) {
SwingUtilities.invokeLater (() ->{
criarTela();
13 - 23
JLabel	valorConvertidoLabel	=	new	JLabel	('');
Container	painelDeConteudo	=	tela.getConteúdoPane();
painelDeConteudo.setLayout	(new	GridLayout	(2,	4,	2,	4));
painelDeConteudo.add(celsiusTextField);
painelDeConteudo.add(celsiusLabel);
painelDeConteudo.add(convertButton);
painelDeConteudo.add(valorConvertidoLabel);
	
	
convertButton.addActionListener((e)	->	{
double	celsius	=	Double.parseDouble(
celsiusTextField.getText()
);
double	fahrenheit	=	celsius	/	5	*	9	+	32;
valorConvertidoLabel.setText(
String.format('%.2f\u00B0F',	fahrenheit)
);
});
	
//ajusta	largura	e	altura	de	acordo	com	o	conteúdo
tela.pack();
//centraliza
tela.setLocationRelativeTo(null);
//altera	comportamento	padrão	do	botão	fechar
tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//torna	a	tela	visível
tela.setVisible(true);
	
}
public	static	void	main(String[]	args)	{
SwingUtilities.invokeLater	(()	->	{
criarTela();
});
}
}
Estudo Guiado
E-Book - Apostila
Aprofunde seus conhecimentos sobreo pacote Swinge o
tratamento de eventos lendoa página 378 atéa 398.
Cl1que no linke leiao livro
DEITEL, P.; DEITEL, H.J ava: como programar. 10.ed. São Paulo: Pearson, 2017.
Os Componentes visuais jcomboboxe jtabte
Um JComboBoxé um componente que faza exibição de uma coleção de itens como um menu.O
desenvolvedor pode configurá-lo, de modoa permitir que o usuário selecione uma única opção,
diversas opções simultaneamente, utilize filtros entre outras ações.
Veja um exemplo,a seguir, em que a figura mostra um menu com uma coleção de nomes de
animais.O usuário pode clicar uma pequena seta na lateral para fazero menu expandir. Após, ele
pode selecionar um nome nalista.
FIGURA5 - JCombobox
14 - 23
https://plataforma.bvirtual.com.br/Acervo/Publicacao/39590
Pig
Bird
Cat
Dog
Rabbit
E LABORAÇÃO DO AUTOR,2020.
E-Book - Apostila
A construção de um JComboBox envolvea especificação da parte visual, bem como deum modelo
que fica responsável pela manipulação dos dados que aparecem no menu.O códigoa seguir mostra
um exemplo de construção de um JComboBox.
15-23
E-Book - Apostila
import javax.swing.JComboBox;
import javax.swing.SWingUtiIities;
import javax.swing.JFrame;
public class ExemploJComboBox {
public static void main(String[] args) (
SWingUtiIities.invokeLater(() ->{
String[] dados = { 'Banana', 'Laranja', 'Uva',
'Pêssego' };
JComboBox menu = new JComboBox<>(dados);
JFrame tela = new JFrame('Exemplo de JComboBox');
tela. setDefau{tC{ose0peration
(JFrame.EXIT ON CLOSE);
tela.getConteudoPane().add(menu);
tela.pack();
tela.setLocationRelativeTo(nu{{);
tela.setVisible(true);
Assim como ocorre com o JComboBox, um componente do tipo JTable requera especificação da
parte visual, bem como deum modelo, que fica responsável por manipular os dados que serão
exibidos. Como seunome sugere, trata-se de um componente visual que exibe dados como uma
tabela.
Para tabelas extremamente simples, podemos utilizara classe DefaultTableModel que deixa
predefinidas diversas características das células da tabela. Por exemplo: seu conteúdo é, por
padrão, atualizável,e elas são capazes de exibir somente texto. Veja um exemplo de JTable com
DefaultTableModel,a seguir.
16-23
import	javax.swing.JComboBox;
import	javax.swing.SwingUtilities;
import	javax.swing.JFrame;
public	class	ExemploJComboBox	{
				public	static	void	main(String[]	args)	{
								SwingUtilities.invokeLater(()	->	{
												String[]	dados	=	{	'Banana',	'Laranja',	'Uva',
'Pêssego'	};
												JComboBox	menu	=	new	JComboBox<>(dados);
												JFrame	tela	=	new	JFrame('Exemplo	de	JComboBox');
												tela.setDefaultCloseOperation
(JFrame.EXIT_ON_CLOSE);
												tela.getConteúdoPane().add(menu);
												tela.pack();
												tela.setLocationRelativeTo(null);
												tela.setVisible(true);
								});
				}
}
E-Book - Apostila
import javax.swing.JFrame;
import javax.suing.JScro1IPane;
import javax.swing.JTable;
import javax.suing.SWingUti1ities;
import javax.swing.table.DefaultTableModel;
public class ExemploJTableDefaultTableModel {
public static void main( String[] a rgs) (
St ring[] colunas = ( ' José' , ' Ped ro ' , ' Ha ria ' } ;
Object[] [] dados = { { 10, 8, 9 }, ( 10, 10, 10 }, ( 7,
7,8 } };
SwingUtilities.invokeLater(()- {
JFrame tela = neu JFrame('Exemplo Tabela simples');
Def auItTab1 eMode1 modelo = nes
Def auIITab1eNodel( dados, colunas);
JTable tabela = nes JTable (modelo);
tela. getC onteúdoPane(). add( nes JScrollPane (tabela));
tela.setDefau{tC{ose0peration(JFrame.EXIT ON CLOSE);
tela.pack();
tela.setLocationRelativeTo(null);
tela.setVisible(true);
Veja comoo modelo fazo papel de mediador entreo componente visuale a coleçao de dados:
17 - 23
import	javax.swing.JFrame;
import	javax.swing.JScrollPane;
import	javax.swing.JTable;
import	javax.swing.SwingUtilities;
import	javax.swing.table.DefaultTableModel;
public	class	ExemploJTableDefaultTableModel	{
				public	static	void	main(String[]	args)	{
								String[]	colunas	=	{	'José',	'Pedro',	'Maria'	};
								Object[][]	dados	=	{	{	10,	8,	9	},	{	10,	10,	10	},	{	7,
7,	8	}	};
								SwingUtilities.invokeLater(()	->	{
												JFrame	tela	=	new	JFrame('Exemplo	Tabela	simples');
												DefaultTableModel	modelo	=	new
DefaultTableModel(dados,	colunas);
												JTable	tabela	=	new	JTable(modelo);
												tela.getConteúdoPane().add(new	JScrollPane(tabela));
												tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
												tela.pack();
												tela.setLocationRelativeTo(null);
												tela.setVisible(true);
								});
				}
}
Jonas
18 anos
Jonas
18 anos
Exemplo1
ELABORAÇAO oOAUTON, 202o.
E-Book - Apostila
Ok, minha r°sponsabiIidade
é exibir os‹ ados daqueles
objetos ali..
Minha única responsabilidade*
¿ ¿ é g uardar obj *tos, não cabea
mim exibi-los Eu deixaria de
ser altamente coeso.
Passa essesd odos pra cá!
Senhora Tabela, não fale diretamente
comigo, por favor. Não seja ingênua!
Não comp ometa seu nível de
responsab idade.E se amanhã outros
objetos es iverem no meu Iugar?
18-23
E-Book - Apostila
FIGURA7 - Conclusão da demonstração
ELABORAÇÃO DO AUTOR, 2020.
Muitas vezes, desejamos personalizara forma como osdados são exibidos nas células de um
JTable. Por exemplo:é muito mais natural que o valor booleano seja apresentado em sua célula
como uma caixa que o usuário pode marcar/desmarcar do que textualmente (true/false ou
verdadeiro/true).
Para fazer essa personalização, criamos um modelo personalizado paraa JTable. Para isso,é
preciso entendera forma como elasecomunica com seu modeloo qual lhedá acesso aos dados de
interesse. Esse processoé ilustradoa seguir.
FIGURA8 - JTable com Modelo personalizado
19 - 23
ORACLE.
E-Book - Apostila
JTable com Modelo personalizado.A figura mostra uma tabela de dados. Abaixo, há um
retângulo que representao objeto JTable, chamado Table Object. Há uma interação entre
um objetoe ele, chamado Table Model Object, também representado por um retângulo.
Por fim,o Table Model Object está conectadoa um Table Data, graficamente representado
por um paralelogramo.O objetivoé mostrar comoo baixo acoplamento entrea tabelae
seus dadosé promovido pelo modelo.
A seguir, construímos um modelo personalizado.
20-23
Estudo Guiado
E-Book - Apostila
public class ExibicaoPersonalizadaTableModel extends
AbstractTabteModel {
public ExibicaoPersonalizadaTableModel (Object [][] dados,
String [] colunas) {
this.dados = dados;
this.colunas = colunas;
p rivate Object [][] dados;
String [] colunas;
g0ver ride
public int getRowCount() {
return dados.length;
g0ver ride
public int getColumnCount() {
retu rn co1 unas. length;
g0ver ride
public Object getValueAt (int rowIndex, int columnIndex) {
return dados[rowIndex] [columnIndex];
g0ver ride
public Class getColumnClass(int columnIndex) {
return getVa{ueAt (0, coIumnIndex).getClass();
U ma vezconstru ido,o modelo pode serutilizado normalmente como feito com o
DefaultTableModel. Basta entregar uma instância de sua classe parao construtor de JTable ao
constru í-la.
O método responsável por especificar paraa JTablea forma como eladeve exibir seus dadosé o
getColumnClass. Eledevolvea classe do objeto existente em uma determinada célula, especificada
por seus parâmetros. Quandoa classe do elementoé <em>Boolean, por exemplo,a JTable tomaráa
decisão de exibi-lo como uma caixa de seleção.
21-23
public	class	ExibicaoPersonalizadaTableModel	extends
AbstractTableModel	{
	public	ExibicaoPersonalizadaTableModel	(Object	[][]	dados,
String	[]	colunas)	{
		this.dados	=	dados;
		this.colunas	=	colunas;
	}
	private	Object	[][]	dados;
	String	[]	colunas;
	
	@Override
	public	int	getRowCount()	{
		return	dados.length;
	}
	@Override
	public	int	getColumnCount()	{
		return	colunas.length;
	}
	@Override
	public	Object	getValueAt(int	rowIndex,	int	columnIndex)	{
		return	dados[rowIndex][columnIndex];
	}
@Override
	public	Class	getColumnClass(int	columnIndex)	{
		return	getValueAt(0,	columnIndex).getClass();
	}
}
E-Book - Apostila
O uso de modelos personalizadosé ilustrado na página 728a 743.
Cl1que no linke leiao livro
DEITEL, P.; DEITEL, H.J ava: como programar. 10.ed. São Paulo: Pearson, 2017.
Curiosidade
Toda classe possui um membro chamado ’class’. Ele representa, comoo nome sugere,a
própria classe.É um membro estático,o que quer dizer que todas as instâncias têm acesso
a ele. Além disso, pode seracessado utilizandoo próprio nome daclasse. Ela pode ser
utilizada para obter informações sobrea própria classe, incluindo os nomes dosmétodos
que define.
Para um programador, mesmo quenãosejao seu enfoque central, considerara usabilidade do
sistemaé essencial. Nesse contexto, estudamos diversos conceitos para desenvolver competências
com esse viés:
22-23
https://plataforma.bvirtual.com.br/Acervo/Publicacao/39590
Exte
E-Book - Apostila
Recursoé melhor visualizado no formato interativo
Refe i
i liog
DEITEL, P; DEITEL, H. Java: como programar. 10.ed. São Paulo: Pearson Education do Brasil, 2017.
ORACLE. How to use tables. Disponível em: https://docs.oracle.com/javase/tutorial/uiswing/compo
nents/table.html. Acesso em: 10 ago. 2020.
23-23
https://docs.oracle.com/javase/tutorial/uiswing/components/table.html