Professor Rafael Monteiro JAVA Interface Grafica - Swing POO usando JAVA.
Java Swing
-
Upload
kelve-aragao -
Category
Documents
-
view
244 -
download
2
description
Transcript of Java Swing
-
Programao Avanada em Java 2012-2013 PAJ03.2 1Programao Avanada em Java 2012-2013 PAJ03.2 1
JButton Deriva de AbstractButton
Pode mostrar texto e imagem A letra sublinhada indica a mnemnica (keyboard shotcut) Pode ser definido um boto selecionado por defeito (setDefaultButton)
no contentor de alto nvel dos botes (p.ex. JFrame ou JDialog) Os botes disabled tm aspeto diferente Cdigo para o Middle Button do exemplo:
ImageIcon middleButtonIcon = createImageIcon("images/middle.gif");b2 = new JButton("Middle button", middleButtonIcon);b2.setVerticalTextPosition(AbstractButton.BOTTOM);b2.setHorizontalTextPosition(AbstractButton.CENTER);b2.setMnemonic(KeyEvent.VK_M);
-
Programao Avanada em Java 2012-2013 PAJ03.2 2Programao Avanada em Java 2012-2013 PAJ03.2 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);public void itemStateChanged(ItemEvent e) { ... Object source = e.getItemSelectable(); if (source == chinButton) { //...make a note of it... } else { ... } if (e.getStateChange() == ItemEvent.DESELECTED) //...make a note of it... ... updatePicture();}
-
Programao Avanada em Java 2012-2013 PAJ03.2 3Programao Avanada em Java 2012-2013 PAJ03.2 3
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 definidabirdButton.setSelected(true);birdButton.addActionListener(this);//Group the radio buttons.ButtonGroup group = new ButtonGroup();group.add(birdButton);public void actionPerformed(ActionEvent e) { picture.setIcon(new ImageIcon("images/" + e.getActionCommand() + ".gif"));}
-
Programao Avanada em Java 2012-2013 PAJ03.2 4Programao Avanada em Java 2012-2013 PAJ03.2 4
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
-
Programao Avanada em Java 2012-2013 PAJ03.2 5Programao Avanada em Java 2012-2013 PAJ03.2 5
Botes (API cont.) Contedo do boto
void setAction(Action), Action getAction() void setText(String), String getText() void setIcon(Icon), Icon getIcon() void setDisabledIcon(Icon), Icon getDisabledIcon(),
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 6Programao Avanada em Java 2012-2013 PAJ03.2 6
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.
Exemplo de uso de uma JList:JList list = new JList(data); //data has type Object[]list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);list.setLayoutOrientation(JList.HORIZONTAL_WRAP);list.setVisibleRowCount(-1);
-
Programao Avanada em Java 2012-2013 PAJ03.2 7Programao Avanada em Java 2012-2013 PAJ03.2 7
JList seleo de elementos Seleo de itens
setSelectionMode SINGLE_SELECTION SINGLE_INTERVAL_SELECTION MULTIPLE_INTERVAL_SELECTION
quando muda a seleo, gerado um ListSelectionEvent podem ser associados ListSelectionListeners, que devem
implementar o mtodo valueChanged(ListSelectionEvent) o mtodo getValueIsAdjusting() retorna true se o utilizador
ainda est a manipular a seleo da JList int getSelectedIndex() ou int[ ] getSelectedIndices()
permitem saber quais os itens selecionados
-
Programao Avanada em Java 2012-2013 PAJ03.2 8Programao Avanada em Java 2012-2013 PAJ03.2 8
JList alterao de contedo Juntando e removendo itens
supondo que o boto fireButton deve apagar o item selecionado (como no exemplo), a resposta a um click nesse boto seria, p.ex.
para juntar um item novo:
listModel = new DefaultListModel();listModel.addElement("Jane Doe");listModel.addElement("John Smith");list = new JList(listModel);
public void actionPerformed(ActionEvent e) { int index = list.getSelectedIndex(); // item selecionado listModel.remove(index); // apaga-o da lista (NO MODELO!!) int size = listModel.getSize(); // quantos sobram? if (size == 0) { //Nobody's left, disable firing. fireButton.setEnabled(false); } else { //Select an index. if (index == listModel.getSize()) { index--; //removed item in last position } list.setSelectedIndex(index); // novo selecionado list.ensureIndexIsVisible(index); // garante que visvel }}
listModel.insertElementAt(employeeName.getText(), index);
-
Programao Avanada em Java 2012-2013 PAJ03.2 9Programao Avanada em Java 2012-2013 PAJ03.2 9
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
-
Programao Avanada em Java 2012-2013 PAJ03.2 10Programao Avanada em Java 2012-2013 PAJ03.2 10
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 11Programao Avanada em Java 2012-2013 PAJ03.2 11
JComboBox Permite que o utilizador escolha uma opo Pode permitir ou no a edio do valor escolhido
Exemplo:
A ComboBox usa um ComboBoxModel Mtodos da interface ComboBoxModel: Object getSelectedItem() void setSelectedItem( Object)
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);
-
Programao Avanada em Java 2012-2013 PAJ03.2 12Programao Avanada em Java 2012-2013 PAJ03.2 12
JComboBox - eventos Atender eventos
ActionEvent
ItemEvent lanado quando muda o estado (selecionado) de um item
CellRenderer Pode ser definido um ListCellRenderer medida para desenhar os itens
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); } ...}
-
Programao Avanada em Java 2012-2013 PAJ03.2 13Programao Avanada em Java 2012-2013 PAJ03.2 13
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 mtodopublic 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
-
Programao Avanada em Java 2012-2013 PAJ03.2 14Programao Avanada em Java 2012-2013 PAJ03.2 14
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
-
Programao Avanada em Java 2012-2013 PAJ03.2 15Programao Avanada em Java 2012-2013 PAJ03.2 15
JTable A JTable permite apresentar e editar dados na forma de tabelas
Construtor
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
JTable table = new JTable(data, columnNames);
-
Programao Avanada em Java 2012-2013 PAJ03.2 16Programao Avanada em Java 2012-2013 PAJ03.2 16
JTable - tamanho Juntar uma tabela a um JScrollPane:
O scroll pane automaticamente coloca o cabealho com o nome das colunas no topo, e garante que fica visvel quando se faz scroll da tabela
Largura das colunas por defeito as colunas tm larguras iguais ao criar a tabela podem ser definidas larguras diferentes, invocando
setPreferredWidth para cada coluna as colunas so guardadas num TableColumnModel cada coluna representada por um objeto do tipo TableColumn
JScrollPane scrPane = new JScrollPane(table);table.setFillsViewportHeight(true);
TableColumn column = null;for (int i = 0; i < 5; i++) { column = table.getColumnModel().getColumn(i); if (i == 2) { column.setPreferredWidth(100); //third column is bigger } else { column.setPreferredWidth(50); }}
-
Programao Avanada em Java 2012-2013 PAJ03.2 17Programao Avanada em Java 2012-2013 PAJ03.2 17
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()
-
Programao Avanada em Java 2012-2013 PAJ03.2 18Programao Avanada em Java 2012-2013 PAJ03.2 18
TableModel Todas as tabelas usam um TableModel para gerir os dados Se nada for dito, usam um DefaultTableModel
Eventos gerados por TableModel alterao nos dados da tabela: informa os TableModelListener tm que implementar o mtodo void tableChanged(TableModelEvent e)
public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); int column = e.getColumn(); TableModel model = (TableModel)e.getSource(); String columnName = model.getColumnName(column); Object data = model.getValueAt(row, column);
...// Do something with the data... }
-
Programao Avanada em Java 2012-2013 PAJ03.2 19Programao Avanada em Java 2012-2013 PAJ03.2 19
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); }}
-
Programao Avanada em Java 2012-2013 PAJ03.2 20Programao Avanada em Java 2012-2013 PAJ03.2 20
Data Change Events Quando os dados so alterados, o TableModel tem que lanar os
eventos apropriados para informar os TableModelListener O AbstractTableModel implementa mtodos que suportam esta
funcionalidade Mais uma razo para estendermos a classe AbstractTableModel, em vez
de programar uma classe a partir do zero
fireTableCellUpdated Update of specified cell.
fireTableRowsUpdated Update of specified rows
fireTableDataChanged Update of entire table (data only)
fireTableRowsInserted New rows inserted
fireTableRowsDeleted Existing rows Deleted
fireTableStructureChanged Invalidate entire table, both data and structure
-
Programao Avanada em Java 2012-2013 PAJ03.2 21Programao Avanada em Java 2012-2013 PAJ03.2 21
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 label alinhada direita
Double, Float como Number, mas usa um NumberFormat para converter para String
Date label, mas usa um DateFormat para converter para String
ImageIcon, Icon label alinhada ao centro
Object label que mostra o valor retornado por toString
-
Programao Avanada em Java 2012-2013 PAJ03.2 22Programao Avanada em Java 2012-2013 PAJ03.2 22
JComboBox como cell editor Pode ser usada uma combo box como editor da clula
TableColumn sportColumn = table.getColumnModel().getColumn(2);...JComboBox comboBox = new JComboBox();comboBox.addItem("Snowboarding");comboBox.addItem("Rowing");comboBox.addItem("Chasing toddlers");comboBox.addItem("Speed reading");comboBox.addItem("Teaching high school");comboBox.addItem("None");sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
-
Programao Avanada em Java 2012-2013 PAJ03.2 23Programao Avanada em Java 2012-2013 PAJ03.2 23
Menus - JMenuBar Hierarquia de classes
Como criar uma barra de menu, associando-a frame:
JMenuBar menuBar = new JMenuBar();...frame.setJMenuBar(menuBar);
-
Programao Avanada em Java 2012-2013 PAJ03.2 24Programao Avanada em Java 2012-2013 PAJ03.2 24
Menus - exemplo Nos diapositivos seguintes vo ser apresentados fragmentos do cdigo
que cria o menu seguinte:
-
Programao Avanada em Java 2012-2013 PAJ03.2 25Programao Avanada em Java 2012-2013 PAJ03.2 25
JMenu JMenuItem menu bar pode ser associado um menu
o exemplo cria uma menu bar, cria um menu, e associa o menu menu bar
o exemplo seguinte cria menu items, e associa-os a um menu
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);
menuItem = new JMenuItem("A text-only menu item", KeyEvent.VK_T);menu.add(menuItem);
menuItem = new JMenuItem("Both text and icon", new ImageIcon("images/middle.gif"));menuItem.setMnemonic(KeyEvent.VK_B);menu.add(menuItem);
menuItem = new JMenuItem(new ImageIcon("images/middle.gif"));menuItem.setMnemonic(KeyEvent.VK_D);menu.add(menuItem);
-
Programao Avanada em Java 2012-2013 PAJ03.2 26Programao Avanada em Java 2012-2013 PAJ03.2 26
JRadioButtonMenuItem JCheckBoxMenuItem Um exemplo de insero de um separador, e radio buttons
Um exemplo de insero de um separador, e check boxes
//a group of radio button menu itemsmenu.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);
//a group of check box menu itemsmenu.addSeparator();cbMenuItem = new JCheckBoxMenuItem("A check box menu item");cbMenuItem.setMnemonic(KeyEvent.VK_C);menu.add(cbMenuItem);
cbMenuItem = new JCheckBoxMenuItem("Another one");cbMenuItem.setMnemonic(KeyEvent.VK_H);menu.add(cbMenuItem);
-
Programao Avanada em Java 2012-2013 PAJ03.2 27Programao Avanada em Java 2012-2013 PAJ03.2 27
Submenu Eventos Para criar um submenu, basta juntar um menu (o submenu) a outro
Para receber eventos: implementam-se listeners correspondentes: JMenuItem: ActionEvent JRadioButtonMenuItem: ActionEvent ou ItemEvent JCheckBoxMenuItems: ItemEvent
//a submenumenu.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);
-
Programao Avanada em Java 2012-2013 PAJ03.2 28Programao Avanada em Java 2012-2013 PAJ03.2 28
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)
Registar um listener com os componentes associados ao popup menu
Mostrar o popup menu quando se clicar o boto do rato (como exemplo)
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);
//Add listener to components that can bring up popup menus.MouseListener popupListener = new PopupListener();output.addMouseListener(popupListener);
class PopupListener extends MouseAdapter { public void mousePressed(MouseEvent e) { maybeShowPopup(e); } private void maybeShowPopup(MouseEvent e) { if (e.isPopupTrigger()) { popup.show(e.getComponent(), e.getX(), e.getY()); } }}
-
Programao Avanada em Java 2012-2013 PAJ03.2 29Programao Avanada em Java 2012-2013 PAJ03.2 29
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);
-
Programao Avanada em Java 2012-2013 PAJ03.2 30Programao Avanada em Java 2012-2013 PAJ03.2 30
JColorChooser Para escolher uma cor de forma interativa
Exemplo usando um DialogColor newColor = JColorChooser.showDialog( ColorChooserDemo2.this, "Choose Background Color", banner.getBackground());if (newColor != null) { banner.setBackground(newColor);}
-
Programao Avanada em Java 2012-2013 PAJ03.2 31Programao Avanada em Java 2012-2013 PAJ03.2 31
JFileChooser Para selecionar um ficheiro
Cria-se um objeto FileChooser Invoca-se o mtodo
showOpenDialog, que tornao dilogo visvel
o mtodo retorna quando outilizador fecha o dilogo
testa-se se terminou validandoou no (Open ou Cancel)
Para visualizar apenas diretrios
//Create a file chooserfinal JFileChooser fc = new JFileChooser();...int returnVal = fc.showOpenDialog(aComponent); // componente paiif (returnVal == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); // processar o ficheiro...}
fc.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY);
-
Programao Avanada em Java 2012-2013 PAJ03.2 32Programao Avanada em Java 2012-2013 PAJ03.2 32
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 33Programao Avanada em Java 2012-2013 PAJ03.2 33
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 O user space um sistema de coordenadas lgicas independente do
dispositivo. Todas as geometrias passadas aos mtodos Java so especificadas em termos de coordenadas neste espao
A origem das coordenadas no user space o canto superior esquerdo da rea de desenho do componente
-
Programao Avanada em Java 2012-2013 PAJ03.2 34Programao Avanada em Java 2012-2013 PAJ03.2 34
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)
A classe Graphics2D deriva da classe Graphics, e mais flexvel e poderosa
-
Programao Avanada em Java 2012-2013 PAJ03.2 35Programao Avanada em Java 2012-2013 PAJ03.2 35
Formas grficas primitivas Point, Line Point
representa uma localizao no espao de coordenadas (x,y) Point, Point2D.Float, Point2D.Double
Line2D representa um segmento de reta no espao de coordenadas (x,y) Line2D.Float, Line2D.Double so dadas as coordenadas de cada extremo
// Create PointPoint p = new Point( 50, 120);
// draw Line2D.Doubleg2.draw(new Line2D.Double(10, 10, 100, 150));
-
Programao Avanada em Java 2012-2013 PAJ03.2 36Programao Avanada em Java 2012-2013 PAJ03.2 36
Formas grficas primitivas - Rectangle Rectangle
representa um retngulo no espao de coordenadas (x,y) Rectangle, Rectangle2D.Float, Rectangle2D.Double draw: apenas o contorno fill: preenche a rea
RoundRectangle representa um retngulo de cantos arredondados RoundRectangle, RoundRectangle2D.Float, RoundRectangle2D.Double
// draw Rectangle2D.Doubleg2.draw(new Rectangle2D.Double(x, y, rectwidth, rectheight));
// draw RoundRectangle2D.Doubleg2.draw(new RoundRectangle2D.Double(
x, y, rectwidth, rectheight, arcWidth, arcHeight));
-
Programao Avanada em Java 2012-2013 PAJ03.2 37Programao Avanada em Java 2012-2013 PAJ03.2 37
Formas grficas primitivas Ellipse, Arc Ellipse
representa uma elipse definida por um retngulo que a engloba Ellipse2D.Float, Ellipse2D.Double draw: desenha apenas o contorno fill: preenche a rea
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 Ellipse2D.Doubleg2.draw(new Ellipse2D.Double(x, y, rectwidth, rectheight));
// draw Arc2D.Doubleg2.draw(new Arc2D.Double(x, y, rectwidth,rectheight, 90, 135, Arc2D.OPEN));
-
Programao Avanada em Java 2012-2013 PAJ03.2 38Programao Avanada em Java 2012-2013 PAJ03.2 38
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));
-
Programao Avanada em Java 2012-2013 PAJ03.2 39Programao Avanada em Java 2012-2013 PAJ03.2 39
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.Doubleredtowhite = new GradientPaint(0,0,color.RED,100,0,color.WHITE);g2.setPaint(redtowhite);g2.fill (new Ellipse2D.Double(0, 0, 100, 50));
-
Programao Avanada em Java 2012-2013 PAJ03.2 40Programao Avanada em Java 2012-2013 PAJ03.2 40
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:
Fontes lgicas Em Java:
Dialog DialogInput Monospaced Serif SansSerif
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();String[] fontFamilies = ge.getAvailableFontFamilyNames();
-
Programao Avanada em Java 2012-2013 PAJ03.2 41Programao Avanada em Java 2012-2013 PAJ03.2 41
Escrita de texto (cont.) Font
classe que representa uma fonte font family: p.ex. Helvetica font face: p.ex. normal, bold, italic font name: p.ex. Helvetica Bold Construtor: Font( String name, int style, int size)
name: pode ser font family name ou font face name constante de estilo para a fonte; bitmapped; PLAIN, BOLD, ITALIC size: tamanho em pontos
Definir a fonte a usar (vlido para Graphics como para componentes de texto, como por exemplo JLabel ou JTextPane
textTestPanel.setFont(new Font(fontChoice, styleChoice, sizeChoice));
-
Programao Avanada em Java 2012-2013 PAJ03.2 42Programao Avanada em Java 2012-2013 PAJ03.2 42
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
Escrever texto:
Anti-aliasing
// get metrics from the graphicsFontMetrics metrics = graphics.getFontMetrics(font);// get the height of a line of text in this font and render contextint hgt = metrics.getHeight();// get the advance of my text in this font and render contextint 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);
g2.setFont( fonteEscolhida);g2.drawString(String s, int x, int y);
g2.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
-
Programao Avanada em Java 2012-2013 PAJ03.2 43Programao Avanada em Java 2012-2013 PAJ03.2 43
Imagens - Image e BufferedImage Na API Java 2D uma imagem tipicamente um array bidimensional
retangular de pixels; cada pixel representa a cor da imagem na respetiva posio; as dimenses representam a extenso horizontal (largura, width) e vertical (altura, height) da imagem quando desenhada
Principal classe a usar: java.awt.image.BufferedImage deriva de Image A classe BufferedImage fundamental no mbito da API Java 2D. Gere a
imagem em memria e disponibiliza mtodos para armazenar, interpretar, e obter informao. Dado que BufferedImage derivada de Image, pode ser usada por todos os mtodos de Graphics e Graphics2D que esperam um parmetro do tipo Image.
Carregar uma imagem de disco
BufferedImage img = null;try { img = ImageIO.read(new File("strawberry.jpg"));} catch (IOException e) {}
-
Programao Avanada em Java 2012-2013 PAJ03.2 44Programao Avanada em Java 2012-2013 PAJ03.2 44
Imagens - desenhar Desenhar uma imagem
observer pode ser null, na maior parte dos casos
Desenhar parte de uma imagem e/ou escalar a imagem dstx1, dsty1, dstx2, dsty2: coordenadas da rea onde a imagem vai ser
desenhada srcx1, srcy1, srcx2, srcy2: rea da imagem que vai ser desenhada
boolean Graphics.drawImage(Image img, int x, int y, ImageObserver observer);
boolean Graphics.drawImage(Image img, int dstx1, int dsty1, int dstx2, int dsty2, int srcx1, int srcy1, int srcx2, int srcy2, ImageObserver observer);
-
Programao Avanada em Java 2012-2013 PAJ03.2 45Programao Avanada em Java 2012-2013 PAJ03.2 45
Imagens criar em memria Criar uma imagem (rea de desenho) em memria
new BufferedImage(width, height, type) type: TYPE_INT_ARGB, TYPE_INT_RGB, ...
ou pedir a um objeto (p.ex. componente) que crie uma imagem compatvel Component.createImage(width, height) GraphicsConfiguration.createCompatibleImage(width, height) GraphicsConfiguration.createCompatibleImage(width, height,
transparency) Desenhar numa imagem em memria
createGraphics retorna um objeto do tipo Graphics2D que podemos usar para desenhar na imagem off_Image o grfico pode depois ser apresentado ao utilizador por exemplo numa
JLabel, gravado, e/ou impresso
BufferedImage off_Image = new BufferedImage(100, 50, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = off_Image.createGraphics();
-
Programao Avanada em Java 2012-2013 PAJ03.2 46Programao Avanada em Java 2012-2013 PAJ03.2 46
Imagens - gravar Gravar uma imagem
static boolean ImageIO.write(RenderedImage im,String formatName,File output) throws IOException
BufferedImage implementa o interface RenderedImage Exemplo:
Formatos disponveis (pode haver mais plugins instalados) JPEG, PNG, GIF, BMP, WBMP
try { // retrieve image BufferedImage bi = ...; // criada uma imagem em memria File outputfile = new File("saved.png"); ImageIO.write(bi, "png", outputfile);} catch (IOException e) { ...}
Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46