Professional Documents
Culture Documents
Deriva de AbstractButton
2012-2013
PAJ03.2
JCheckBox
Deriva de AbstractButton
Tem um atributo selected (boolean)
Pode fazer parte de menus
Ao ser atuado, gera um item event e um
action event
normalmente usa-se o item event
chinButton = new JCheckBox("Chin");
chinButton.setMnemonic(KeyEvent.VK_C);
chinButton.setSelected(true);
chinButton.addItemListener(this);
2012-2013
PAJ03.2
JRadioButton
Deriva de AbstractButton
Semelhante a JCheckBox, mas em cada
momento s um boto de cada grupo pode
estar selecionado
O grupo definido por um ButtonGroup
Ao ser atuado, gera um action event e dois
item events, um para cada opo mudada
normalmente usa-se o action event
JRadioButton birdButton = new JRadioButton(birdString);
birdButton.setMnemonic(KeyEvent.VK_B);
birdButton.setActionCommand(birdString); // birdString j definida
birdButton.setSelected(true);
birdButton.addActionListener(this);
2012-2013
PAJ03.2
Botes (API)
Construtor de JButton
JButton(String, Icon), JButton(String), JButton(Icon), JButton()
Construtor de JCheckBox
JCheckBox(), JCheckBox(String), JCheckBox(Icon)
JCheckBox(Icon, boolean), JCheckBox(String, Icon)
JCheckBox(String, boolean), JCheckBox(String, Icon, boolean)
Construtor de JRadioButton
JRadioButton(), JRadioButton(String), JRadioButton(Icon),
JRadioButton(String, boolean), JRadioButton(Icon, boolean),
JRadioButton(String, Icon), JRadioButton(String, Icon, boolean)
ButtonGroup
ButtonGroup()
void add(AbstractButton), void remove(AbstractButton)
public ButtonGroup getGroup()
retorna o grupo que controla um boto
public ButtonGroup clearSelection()
limpa o estado selected dos botes do grupo
2012-2013
PAJ03.2
Aspeto
void setHorizontalAlignment(int), void setVerticalAlignment(int),
int getHorizontalAlignment(), int getVerticalAlignment()
void setHorizontalTextPosition(int), void setVerticalTextPosition(int),
int getHorizontalTextPosition(), int getVerticalTextPosition()
void setMargin(Insets), Insets getMargin()
void setIconTextGap(int), int getIconTextGap()
Funcionalidade
void setSelected(boolean), boolean isSelected()
void addActionListener(ActionListener),
ActionListener removeActionListener()
void addItemListener(ItemListener), ItemListener removeItemListener()
void setMnemonic(int), char getMnemonic(),
Programao Avanada em Java
2012-2013
PAJ03.2
JList
A JList apresenta um grupo de itens, em
uma ou mais colunas
A JList tem associado um ListModel, que
armazena os dados
ListModel: interface
AbstractListModel: o programador gere os
dados e invoca os mtodos fire. Tem
que estender a classe abstrata
AbstractListModel e implementar os
mtodos getSize e getElementAt
DefaultListModel: est tudo tratado; serve
para a maior parte das aplicaes
Se o construtor inicializar a JList com um
array ou um Vector, automaticamente
criado, e -lhe associado, um ListModel
imutvel.
2012-2013
PAJ03.2
2012-2013
PAJ03.2
2012-2013
PAJ03.2
JList - CellRenderer
CellRenderer
Objeto que sabe desenhar cada um dos itens
A JList tem um CellRenderer de defeito que sabe desenhar icons e strings,
e os outros objetos atravs da invocao de toString
Podemos definir o nosso CellRenderer, escrevendo uma classe que
implemente o interface ListCellRenderer. Tem apenas um mtodo, que
retorna um componente:
Component getListCellRendererComponent( JList<? extends E> list,
E value, int index, boolean isSelected,
boolean cellHasFocus)
2012-2013
PAJ03.2
JList (API)
Inicializao dos dados
JList(), JList(ListModel), JList(Object[ ]), JList(Vector)
void setModel(ListModel), ListModel getModel()
void setListData(Object[ ]), void setListData(Vector)
Apresentao da lista
void setVisibleRowCount(int), int getVisibleRowCount()
nmero de linhas visveis sem scroll
void setLayoutOrientation(int), int getLayoutOrientation()
VERTICAL, HORIZONTAL_WRAP, VERTICAL_WRAP
int getFirstVisibleIndex(), int getLastVisibleIndex()
void ensureIndexIsVisible(int)
Seleo
void addListSelectionListener(ListSelectionListener)
void setSelectedIndex(int), void setSelectedIndices(int[ ]),
void setSelectedValue(Object, boolean), void setSelectionInterval(int, int)
int getSelectedIndex(), int[ ] getSelectedIndices()
Object getSelectedValue(), Object[ ] getSelectedValues()
...
Programao Avanada em Java
2012-2013
PAJ03.2
10
JComboBox
Permite que o utilizador escolha uma opo
Pode permitir ou no a edio do valor escolhido
Exemplo:
String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
//Create the combo box, select item at index 4.
//Indices start at 0, so 4 specifies the pig.
JComboBox petList = new JComboBox(petStrings);
petList.setSelectedIndex(4);
petList.addActionListener(this);
2012-2013
PAJ03.2
11
JComboBox - eventos
Atender eventos
ActionEvent
public class ComboBoxDemo ... implements ActionListener {
...
petList.addActionListener(this) {
...
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox)e.getSource();
String petName = (String)cb.getSelectedItem();
updateLabel(petName);
}
...
}
ItemEvent
lanado quando muda o estado (selecionado) de um item
CellRenderer
Pode ser definido um ListCellRenderer medida para desenhar os itens
2012-2013
PAJ03.2
12
JComboBox - CellRenderer
Tal como em JList, pode ser definido pelo programador a forma como
representado cada elemento da ComboBox
Tem que implementar o interface ListCellRenderer,
o que implica ter que implementar o mtodo
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
O componente retornado por este mtodo ser usado para representar o
elemento da combo box
A classe que implementa este interface pode estender outra classe, por
exemplo JLabel
2012-2013
PAJ03.2
13
JComboBox (API)
Definindo e acedendo aos itens
JComboBox(), JComboBox(ComboBoxModel), JComboBox(Object[ ]),
JComboBox(Vector)
void addItem(Object), void insertItemAt(Object, int)
Object getItemAt(int), Object getSelectedItem()
void removeAllItems(), void removeItemAt(int), void removeItem(Object)
int getItemCount()
void setModel(ComboBoxModel), ComboBoxModel getModel()
Operao
void addActionListener(ActionListener)
void addItemListener(ItemListener)
void setEditable(boolean), boolean isEditable()
void setRenderer(ListCellRenderer), ListCellRenderer getRenderer()
void setEditor(ComboBoxEditor), ComboBoxEditor getEditor()
objeto que gere a edio de texto, quando editvel
2012-2013
PAJ03.2
14
JTable
A JTable permite apresentar e editar dados na forma de tabelas
Construtor
JTable table = new JTable(data, columnNames);
Desvantagem:
Todas as clulas so editveis
Todas as clulas so do tipo String
Os dados tm que ser fornecidos num array ou Vector
Alternativa: usar um TableModel
2012-2013
PAJ03.2
15
JTable - tamanho
Juntar uma tabela a um JScrollPane:
JScrollPane scrPane = new JScrollPane(table);
table.setFillsViewportHeight(true);
2012-2013
PAJ03.2
16
JTable - TableColumn
Cada JTable tem um TableColumnModel, que tem uma coleo de
TableColumn
Cada TableColumn caracteriza uma coluna da JTable
TableCellEditor getCellEditor(),
void setCellEditor(TableCellEditor cellEditor)
TableCellRenderer getCellRenderer(),
void setCellRenderer(TableCellRenderer cellRenderer)
TableCellRenderer getHeaderRenderer(),
void setHeaderRenderer(TableCellRenderer headerRenderer)
Object getHeaderValue(), void setHeaderValue(Object headerValue)
int getMaxWidth(), void setMaxWidth(int maxWidth)
int getMinWidth(), void setMinWidth(int minWidth)
int getModelIndex(), void setModelIndex(int modelIndex)
int getPreferredWidth(), void setPreferredWidth(int preferredWidth)
boolean getResizable(), void setResizable(boolean isResizable)
int getWidth(), void setWidth(int width)
void sizeWidthToFit()
2012-2013
PAJ03.2
17
TableModel
Todas as tabelas usam um TableModel para gerir os dados
Se nada for dito, usam um DefaultTableModel
2012-2013
PAJ03.2
18
AbstractTableModel
Normalmente implementa-se o TableModel estendendo a classe
AbstractTableModel
Exemplo simples:
class MeuTableModel extends AbstractTableModel {
public String getColumnName(int col) {
return columnNames[col].toString();
}
public int getRowCount() { return rowData.length; }
public int getColumnCount() { return columnNames.length; }
public Object getValueAt(int row, int col) { return rowData[row][col]; }
public boolean isCellEditable(int row, int col) { return true; }
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col);
}
}
2012-2013
PAJ03.2
19
fireTableCellUpdated
fireTableRowsUpdated
fireTableDataChanged
fireTableRowsInserted
fireTableRowsDeleted
fireTableStructureChanged
2012-2013
PAJ03.2
20
Editors e Renderers
Por razes de eficincia as clulas das tabelas no so componentes
Um mesmo cell renderer normalmente usado para desenhar todas as
clulas de um dado tipo
Um cell editor trata da edio do contedo
Exemplo: por defeito uma clula do tipo Integer desenhada com uma
JLabel; se o utilizador comear a editar a clula, o editor usa um JTextField
alinhado direita
O utilizador pode definir o cell renderer a usar em cada coluna. Se o no
fizer, escolhido automaticamente um dependente do tipo de coluna:
Boolean
check box
Number
Double, Float
Date
ImageIcon, Icon
Object
2012-2013
PAJ03.2
21
2012-2013
PAJ03.2
22
Menus - JMenuBar
Hierarquia de classes
2012-2013
PAJ03.2
23
Menus - exemplo
Nos diapositivos seguintes vo ser apresentados fragmentos do cdigo
que cria o menu seguinte:
2012-2013
PAJ03.2
24
JMenu JMenuItem
menu bar pode ser associado um menu
o exemplo cria uma menu bar, cria um menu, e associa o menu menu
bar
JMenuBar menuBar;
JMenu menu, submenu;
...
//Create the menu bar.
menuBar = new JMenuBar();
//Build the first menu.
menu = new JMenu("A Menu");
menu.setMnemonic(KeyEvent.VK_A);
menuBar.add(menu);
2012-2013
PAJ03.2
25
JRadioButtonMenuItem JCheckBoxMenuItem
Um exemplo de insero de um separador, e radio buttons
//a group of radio button menu items
menu.addSeparator();
ButtonGroup group = new ButtonGroup();
rbMenuItem = new JRadioButtonMenuItem("A radio button menu item");
rbMenuItem.setSelected(true);
rbMenuItem.setMnemonic(KeyEvent.VK_R);
group.add(rbMenuItem);
menu.add(rbMenuItem);
rbMenuItem = new JRadioButtonMenuItem("Another one");
rbMenuItem.setMnemonic(KeyEvent.VK_O);
group.add(rbMenuItem);
menu.add(rbMenuItem);
2012-2013
PAJ03.2
26
Submenu Eventos
Para criar um submenu, basta juntar um menu (o submenu) a outro
//a submenu
menu.addSeparator();
submenu = new JMenu("A submenu");
submenu.setMnemonic(KeyEvent.VK_S);
menuItem = new JMenuItem("An item in the submenu");
menuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_2, ActionEvent.ALT_MASK));
submenu.add(menuItem);
menuItem = new JMenuItem("Another item");
submenu.add(menuItem);
menu.add(submenu);
2012-2013
PAJ03.2
27
JPopupMenu
Tem que se registar um MouseListener com cada elemento a que
queremos associar o popup menu
Criar o popup menu ( como os menus normais)
popup = new JPopupMenu();
menuItem = new JMenuItem("A popup menu item");
menuItem.addActionListener(this);
popup.add(menuItem);
menuItem = new JMenuItem("Another popup menu item");
menuItem.addActionListener(this);
popup.add(menuItem);
2012-2013
PAJ03.2
28
Borders
Para criar borders, recomenda-se usar a BorderFactory
blackline = BorderFactory.createLineBorder(Color.black);
raisedetched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
raisedbevel = BorderFactory.createRaisedBevelBorder();
loweredbevel = BorderFactory.createLoweredBevelBorder();
empty = BorderFactory.createEmptyBorder();
title = BorderFactory.createTitledBorder( blackline, "title");
componente.setBorder(raisedbevel);
2012-2013
PAJ03.2
29
JColorChooser
Para escolher uma cor de forma interativa
2012-2013
PAJ03.2
30
JFileChooser
Para selecionar um ficheiro
Cria-se um objeto FileChooser
Invoca-se o mtodo
showOpenDialog, que torna
o dilogo visvel
o mtodo retorna quando o
utilizador fecha o dilogo
testa-se se terminou validando
ou no (Open ou Cancel)
//Create a file chooser
final JFileChooser fc = new JFileChooser();
...
int returnVal = fc.showOpenDialog(aComponent); // componente pai
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
// processar o ficheiro...
}
fc.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY);
2012-2013
PAJ03.2
31
JFileChooser - FileFilter
Para selecionar os ficheiros a mostrar.
O filtro tem que implementar o interface FileFilter, que obriga a
implementar os mtodos accept e getDescription
Exemplo que aceita apenas ficheiros com imagens:
public class ImageFilter extends FileFilter {
//Accept all directories and all gif, jpg, tiff, or png files.
public boolean accept(File f) {
if (f.isDirectory()) { return true; }
String extension = Utils.getExtension(f);
if (extension != null) {
if (extension.equals(Utils.tiff) ||
extension.equals(Utils.tif) ||
extension.equals(Utils.gif) ||
extension.equals(Utils.jpeg) ||
extension.equals(Utils.jpg) ||
extension.equals(Utils.png)) {
return true;
} else { return false; }
}
return false;
}
public String getDescription() {
return "Just Images";
}
Programao Avanada em Java
2012-2013
PAJ03.2
32
Grficos
Vamos abordar alguns conceitos, o que no dispensa a consulta
documentao da API, tutoriais ou outras fontes de informao
Espaos de coordenadas:
User space O espao no qual as primitivas grficas so especificadas
Device space O sistema de coordenadas do dispositivo, tal como um
monitor, uma janela ou uma impressora
2012-2013
PAJ03.2
33
Rendering (renderizao)
A API Java 2D, que inclui a classe java.awt.Graphics2D, garante que o
processo de renderizao (composio da imagem) a mesma para
qualquer dispositivo (monitor, impressora, etc.). Inclui:
Renderizao do contorno das formas geomtricas primitivas, usando
atributos de trao e cor (mtodo draw)
Renderizao de formas geomtricas primitivas preenchendo o seu interior
com a cor e padro especificados (mtodo fill)
Renderizao de texto (mtodo drawString); o atributo font usado para
converter o texto em smbolos, que so preenchidos com a cor e padro
especificados
Renderizao de imagem (mtodo drawImage)
2012-2013
PAJ03.2
34
Line2D
representa um segmento de reta no espao de coordenadas (x,y)
Line2D.Float, Line2D.Double
so dadas as coordenadas de cada extremo
// draw Line2D.Double
g2.draw(new Line2D.Double(10, 10, 100, 150));
2012-2013
PAJ03.2
35
RoundRectangle
representa um retngulo de cantos arredondados
RoundRectangle, RoundRectangle2D.Float, RoundRectangle2D.Double
// draw RoundRectangle2D.Double
g2.draw(new RoundRectangle2D.Double(
x, y,
rectwidth, rectheight,
arcWidth, arcHeight));
2012-2013
PAJ03.2
36
Arc
Para desenhar parte de uma elipse. A elipse definida por um retngulo, e
define-se ainda um ngulo de incio do arco, um arco de extenso, e a
forma de fecho
// draw Arc2D.Double
g2.draw(new Arc2D.Double(x, y,
rectwidth,rectheight,
90, 135,
Arc2D.OPEN));
2012-2013
PAJ03.2
37
Renderizao exemplo 1
Exemplo de desenho de um retngulo de cantos arredondados com
trao interrompido
g2: contexto grfico (graphics context) onde feito o desenho
dashed: stroke, ou seja, o tipo de trao a usar no desenho
draw: mtodo que faz o desenho com as condies especificadas
// draw RoundRectangle2D.Double
final static float dash1[] = {10.0f};
final static BasicStroke dashed =
new BasicStroke(1.0f,
BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER,
10.0f, dash1, 0.0f);
g2.setStroke(dashed);
g2.draw(new RoundRectangle2D.Double(x, y,
rectWidth,
rectHeight,
10, 10));
2012-2013
PAJ03.2
38
Renderizao exemplo 2
Exemplo de desenho de uma elipse preenchida com um gradiente de
cor
g2: contexto grfico (graphics context) onde feito o desenho
redtowhite: o gradiente a usar para preencher o espao da elipse
fill: mtodo que desenha a elipse e preenche o interior com a cor
especificada; o mtodo drw permitiria desenhar apenas o contorno da
elipse, sem pintar o interior
// fill Ellipse2D.Double
redtowhite = new GradientPaint(0,0,color.RED,100,0,color.WHITE);
g2.setPaint(redtowhite);
g2.fill (new Ellipse2D.Double(0, 0, 100, 50));
2012-2013
PAJ03.2
39
Fontes
Fontes fsicas
Contm a informao (smbolos e tabelas) que permitem converter
sequncias de caracteres em sequncias de smbolos, p.ex., TrueType
Para conhecer as fontes instaladas:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] fontFamilies = ge.getAvailableFontFamilyNames();
Fontes lgicas
Em Java:
Dialog
DialogInput
Monospaced
Serif
SansSerif
2012-2013
PAJ03.2
40
2012-2013
PAJ03.2
41
Escrita de texto
Mtricas so medidas do texto renderizado por uma fonte, como por
exemplo a altura de uma linha de texto
A forma mais simples de medir texto usar uma instncia de FontMetrics
// get metrics from the graphics
FontMetrics metrics = graphics.getFontMetrics(font);
// get the height of a line of text in this font and render context
int hgt = metrics.getHeight();
// get the advance of my text in this font and render context
int adv = metrics.stringWidth(text);
// calculate the size of a box to hold the text with some padding.
Dimension size = new Dimension(adv+2, hgt+2);
Escrever texto:
g2.setFont( fonteEscolhida);
g2.drawString(String s, int x, int y);
Anti-aliasing
g2.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
2012-2013
PAJ03.2
42
2012-2013
PAJ03.2
43
Imagens - desenhar
Desenhar uma imagem
observer pode ser null, na maior parte dos casos
boolean Graphics.drawImage(Image img, int x, int y,
ImageObserver observer);
2012-2013
PAJ03.2
44
2012-2013
PAJ03.2
45
Imagens - gravar
Gravar uma imagem
static boolean ImageIO.write(RenderedImage im,
String formatName,
File output) throws IOException
BufferedImage implementa o interface RenderedImage
Exemplo:
try {
// retrieve image
BufferedImage bi = ...; // criada uma imagem em memria
File outputfile = new File("saved.png");
ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
...
}
2012-2013
PAJ03.2
46