/* * JClic accessibility * TFormExchange.java * Created on august / 2009 * * @author Jordi Lagares Roset "jlagares@xtec.cat - www.lagares.org" * amb el suport del Departament d'Educacio de la Generalitat de Catalunya * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details (see the LICENSE file). */ package edu.xtec.jclic.accessibility; import edu.xtec.util.Options; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Toolkit; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; /** * * @author jlagares * * TODO: Allow different keyboard layouts * TODO: Normalize the creation of icons * * */ public class TFormKeyboard extends JFrame { JPanel panelPlaphoons; public static final int CELLS_X = 15, CELLS_Y = 5; public static final int DEFAULT_POS_X = 100, DEFAULT_POS_Y = 100; public static final int DEFAULT_WIDTH = 445, DEFAULT_HEIGHT = 160; public static final float FONT_SIZE_INCREMENT = 4.0F; int cellWidth; int cellHeight; JLabel keys[][] = new JLabel[CELLS_X][CELLS_Y]; boolean full[][] = new boolean[CELLS_X][CELLS_Y]; int frameBorder = 1; int frameSpan = 2; int span = frameSpan; boolean isShiftLock = false; boolean isShift = false; int iIsShift, nIsShift; boolean isHorizontalScanning = false; int xPos = 0; int yPos = 0; FressaFunctions fressa; Font font; Font boldFont; public TFormKeyboard(Options options, FressaFunctions fressa) { this.fressa = fressa; setResizable(true); setLocation(DEFAULT_POS_X, DEFAULT_POS_Y); setTitle(options.getMsg("acc_keyboardTitle")); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); panelPlaphoons = new JPanel(); panelPlaphoons.setBackground(Color.white); panelPlaphoons.setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); add(panelPlaphoons, BorderLayout.CENTER); panelPlaphoons.setLayout(null); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); font = (new JLabel()).getFont(); font = font.deriveFont(font.getSize2D() + FONT_SIZE_INCREMENT); boldFont = font.deriveFont(Font.BOLD); java.awt.event.MouseAdapter mAdapter = new java.awt.event.MouseAdapter() { @Override public void mouseReleased(java.awt.event.MouseEvent me) { if (me.getButton() == java.awt.event.MouseEvent.BUTTON1) { plafonsOnClick(me); } } }; for (int i = 0; i < CELLS_X; i++) { for (int n = 0; n < CELLS_Y; n++) { full[i][n] = false; keys[i][n] = new JLabel(); if (i > 0) { keys[i][n].setBorder(BorderFactory.createLineBorder(Color.black, frameBorder)); } keys[i][n].setHorizontalAlignment(javax.swing.SwingConstants.CENTER); keys[i][n].setFont(font); panelPlaphoons.add(keys[i][n]); keys[i][n].addMouseListener(mAdapter); } } lowercase(); setAlwaysOnTop(true); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = this.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height)); calcFrameSize(); addComponentListener(new java.awt.event.ComponentAdapter() { @Override public void componentResized(java.awt.event.ComponentEvent evt) { calcFrameSize(); } }); // Disable scan menu? // Bad idea when changing of activity... /* addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(WindowEvent e) { // Disable code here } }); * */ } void sendKey(int t) { if (fressa.robot != null) { fressa.robot.keyPress(t); fressa.robot.keyRelease(t); } isShiftFalse(); } void sendShiftKey(int t) { if (fressa.robot != null) { fressa.robot.keyPress(KeyEvent.VK_SHIFT); fressa.robot.keyPress(t); fressa.robot.keyRelease(t); fressa.robot.keyRelease(KeyEvent.VK_SHIFT); } isShiftFalse(); } void isShiftFalse() { if (isShift) { isShift = false; // WARNING: possible ArrayOutOfBoundsException: keys[iIsShift][nIsShift].setForeground(Color.black); // WARNING: possible unnecessary repaint of all panel: if (isShiftLock) { uppercase(); } else { lowercase(); } } } public void changeScanningPosition() { if (isHorizontalScanning) { xPos++; if (xPos >= CELLS_X) { isHorizontalScanning = false; xPos = 0; yPos = 0; } else { //WARNING: possible outOfBoundsException and NullPointerException: while ((keys[xPos][yPos].getText().equals("")) && (!full[xPos][yPos])) { xPos++; if (xPos >= CELLS_X) { isHorizontalScanning = false; xPos = 0; yPos = 0; break; } } } } else { yPos = (yPos + 1) % CELLS_Y; } int x = keys[xPos][yPos].getLocationOnScreen().x + cellWidth / 2; int y = keys[xPos][yPos].getLocationOnScreen().y + cellHeight / 2; mouseMove(x, y); if (fressa.readLabels && !keys[xPos][yPos].getText().equals("")) { fressa.readText(keys[xPos][yPos].getText()); } } public void doClick() { if (fressa.robot != null) { fressa.robot.mousePress(InputEvent.BUTTON1_MASK); fressa.robot.mouseRelease(InputEvent.BUTTON1_MASK); } } public void mouseMove(int x, int y) { if (fressa.robot != null) { fressa.robot.mouseMove(x, y); } } public void plafonsOnClick(java.awt.event.MouseEvent evt) { // WARNING: Too much "returns" int ic = -1; int nc = -1; if (fressa.actPanel == null) { return; } // WARNINIG: Use SwingUtilities.InvokeLater instead fressa.actPanel.requestFocus(); int wait = 0, maxWait = 10; while (!fressa.actPanel.hasFocus() && ++wait <= maxWait) { try { Thread.sleep(10); } catch (InterruptedException ex) { System.err.println("Error while waiting to transfer focus. " + ex.getMessage()); break; } } if (!fressa.actPanel.hasFocus()) { System.err.println("Accessible keyboard: Error transferring focus!"); return; } for (int i = 0; i < CELLS_X; i++) { for (int n = 0; n < CELLS_Y; n++) { if (evt.getComponent().equals(keys[i][n])) { ic = i; nc = n; break; } } } if ((ic == -1) && (nc == -1)) { return; } fressa.mustDisableScanTimer = true; if (ic == 0) { isHorizontalScanning = true; xPos = 0; changeScanningPosition(); return; } else { isHorizontalScanning = false; xPos = 0; yPos = -1; } if ((nc == 0) && (ic == 14)) { sendKey(KeyEvent.VK_BACK_SPACE); } else if (keys[ic][nc].getText().equals("tab")) { if (isShift) { sendShiftKey(KeyEvent.VK_TAB); } else { sendKey(KeyEvent.VK_TAB); } } else if ((((nc == 1) || (nc == 2)) && (ic == 14)) || ((nc == 0) && (ic == 1))) { sendKey(KeyEvent.VK_ENTER); } else if ((nc == 4) && (ic == 1)) { sendKey(KeyEvent.VK_SPACE); } else if ((nc == 4) && (ic == 2)) { sendKey(KeyEvent.VK_DELETE); } else if ((nc == 4) && (ic == 3)) { sendKey(KeyEvent.VK_LEFT); } else if ((nc == 4) && (ic == 4)) { sendKey(KeyEvent.VK_RIGHT); } else if ((nc == 4) && (ic == 5)) { sendKey(KeyEvent.VK_DOWN); } else if ((nc == 4) && (ic == 6)) { sendKey(KeyEvent.VK_UP); } else if (keys[ic][nc].getText().equals("º")) { } else if (keys[ic][nc].getText().equals("1")) { sendKey(KeyEvent.VK_1); } else if (keys[ic][nc].getText().equals("2")) { sendKey(KeyEvent.VK_2); } else if (keys[ic][nc].getText().equals("3")) { sendKey(KeyEvent.VK_3); } else if (keys[ic][nc].getText().equals("4")) { sendKey(KeyEvent.VK_4); } else if (keys[ic][nc].getText().equals("5")) { sendKey(KeyEvent.VK_5); } else if (keys[ic][nc].getText().equals("6")) { sendKey(KeyEvent.VK_6); } else if (keys[ic][nc].getText().equals("7")) { sendKey(KeyEvent.VK_7); } else if (keys[ic][nc].getText().equals("8")) { sendKey(KeyEvent.VK_8); } else if (keys[ic][nc].getText().equals("9")) { sendKey(KeyEvent.VK_9); } else if (keys[ic][nc].getText().equals("0")) { sendKey(KeyEvent.VK_0); } else if (keys[ic][nc].getText().equals("'")) { sendKey(KeyEvent.VK_QUOTE); } else if (keys[ic][nc].getText().equals("¡")) { sendKey(KeyEvent.VK_INVERTED_EXCLAMATION_MARK); } else if (keys[ic][nc].getText().equals("`")) { sendKey(KeyEvent.VK_DEAD_GRAVE); } else if (keys[ic][nc].getText().equals("+")) { sendKey(KeyEvent.VK_PLUS); } else if (keys[ic][nc].getText().equals("ñ")) { //això en principi funciona, diria que en Linux no funciona if (fressa.robot != null) { fressa.robot.keyPress(KeyEvent.VK_ALT); fressa.robot.keyPress(KeyEvent.VK_NUMPAD1); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD1); fressa.robot.keyPress(KeyEvent.VK_NUMPAD6); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD6); fressa.robot.keyPress(KeyEvent.VK_NUMPAD4); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD4); fressa.robot.keyRelease(KeyEvent.VK_ALT); } isShiftFalse(); } else if (keys[ic][nc].getText().equals("´")) { sendKey(KeyEvent.VK_DEAD_ACUTE); } else if (keys[ic][nc].getText().equals("ç")) { //sendKey("\u00E7".codePointAt(0)); //això en principi funciona, no sé si en Linux també if (fressa.robot != null) { fressa.robot.keyPress(KeyEvent.VK_ALT); fressa.robot.keyPress(KeyEvent.VK_NUMPAD1); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD1); fressa.robot.keyPress(KeyEvent.VK_NUMPAD3); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD3); fressa.robot.keyPress(KeyEvent.VK_NUMPAD5); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD5); fressa.robot.keyRelease(KeyEvent.VK_ALT); } isShiftFalse(); } else if (keys[ic][nc].getText().equals(",")) { sendKey(KeyEvent.VK_COMMA); } else if (keys[ic][nc].getText().equals(".")) { sendKey(keys[ic][nc].getText().codePointAt(0)); } else if (keys[ic][nc].getText().equals("-")) { sendKey(KeyEvent.VK_MINUS); } else if (keys[ic][nc].getText().equals("<")) { sendKey(KeyEvent.VK_LESS); } else if (keys[ic][nc].getText().equals("ª")) { //sendKey(keys[ic][nc].getText().codePointAt(0)); } else if (keys[ic][nc].getText().equals("!")) { sendShiftKey(KeyEvent.VK_1); } else if (keys[ic][nc].getText().equals("\"")) { sendShiftKey(KeyEvent.VK_2); } else if (keys[ic][nc].getText().equals("·")) { sendShiftKey(KeyEvent.VK_3); } else if (keys[ic][nc].getText().equals("$")) { sendShiftKey(KeyEvent.VK_4); } else if (keys[ic][nc].getText().equals("%")) { sendShiftKey(KeyEvent.VK_5); } else if (keys[ic][nc].getText().equals("&")) { sendShiftKey(KeyEvent.VK_6); } else if (keys[ic][nc].getText().equals("/")) { sendKey(KeyEvent.VK_DIVIDE); } else if (keys[ic][nc].getText().equals("(")) { sendShiftKey(KeyEvent.VK_8); } else if (keys[ic][nc].getText().equals(")")) { sendShiftKey(KeyEvent.VK_9); } else if (keys[ic][nc].getText().equals("=")) { sendShiftKey(KeyEvent.VK_0); } else if (keys[ic][nc].getText().equals("?")) { sendShiftKey(KeyEvent.VK_QUOTE); } else if (keys[ic][nc].getText().equals("¿")) { sendShiftKey(KeyEvent.VK_INVERTED_EXCLAMATION_MARK); } else if (keys[ic][nc].getText().equals("^")) { //sendKey(KeyEvent.VK_CIRCUMFLEX); sendShiftKey(KeyEvent.VK_DEAD_GRAVE); } else if (keys[ic][nc].getText().equals("*")) { sendShiftKey(KeyEvent.VK_PLUS); } else if (keys[ic][nc].getText().equals("¨")) { //sendShiftKey(KeyEvent.VK_DEAD_DIAERESIS); sendShiftKey(KeyEvent.VK_DEAD_ACUTE); } else if (keys[ic][nc].getText().equals("Ç")) { //sendShiftKey("ç".codePointAt(0)); //això en principi funciona, no sé si en Linux també if (fressa.robot != null) { fressa.robot.keyPress(KeyEvent.VK_ALT); fressa.robot.keyPress(KeyEvent.VK_NUMPAD1); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD1); fressa.robot.keyPress(KeyEvent.VK_NUMPAD2); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD2); fressa.robot.keyPress(KeyEvent.VK_NUMPAD8); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD8); fressa.robot.keyRelease(KeyEvent.VK_ALT); } isShiftFalse(); } else if (keys[ic][nc].getText().equals("Ñ")) { //sendShiftKey("ç".codePointAt(0)); //això en principi funciona, no sé si en Linux també if (fressa.robot != null) { fressa.robot.keyPress(KeyEvent.VK_ALT); fressa.robot.keyPress(KeyEvent.VK_NUMPAD1); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD1); fressa.robot.keyPress(KeyEvent.VK_NUMPAD6); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD6); fressa.robot.keyPress(KeyEvent.VK_NUMPAD5); fressa.robot.keyRelease(KeyEvent.VK_NUMPAD5); fressa.robot.keyRelease(KeyEvent.VK_ALT); } isShiftFalse(); } else if (keys[ic][nc].getText().equals(">")) { sendShiftKey(KeyEvent.VK_LESS); } else if (keys[ic][nc].getText().equals(";")) { sendShiftKey(KeyEvent.VK_COMMA); } else if (keys[ic][nc].getText().equals(":")) { sendShiftKey(".".codePointAt(0)); } else if (keys[ic][nc].getText().equals("_")) { sendShiftKey(KeyEvent.VK_MINUS); } else if (keys[ic][nc].getText().equals("co")) { if (fressa.robot != null && fressa.actPanelRectangleMiddleBottom != null) { mouseMove(fressa.actPanelRectangleMiddleBottom.x, fressa.actPanelRectangleMiddleBottom.y); doClick(); } } else if (keys[ic][nc].getText().equals("<>")) { fressa.currentZone = 0; fressa.place = 0; } else if (keys[ic][nc].getText().equals("BM")) { isShiftLock = !isShiftLock; if (isShift) { isShift = false; keys[iIsShift][nIsShift].setForeground(new java.awt.Color(0, 0, 0)); } if (isShiftLock) { uppercase(); //keys[ic][nc].setBackground(new java.awt.Color(127,127,127)); keys[ic][nc].setForeground(new java.awt.Color(127, 127, 127)); } else { lowercase(); //keys[ic][nc].setBackground(new java.awt.Color(255,255,255)); keys[ic][nc].setForeground(new java.awt.Color(0, 0, 0)); } } else if (keys[ic][nc].getText().equals("shi")) { isShift = !isShift; iIsShift = ic; nIsShift = nc; if (isShift) { if (isShiftLock) { lowercase(); } else { uppercase(); } keys[ic][nc].setForeground(new java.awt.Color(127, 127, 127)); } else { if (isShiftLock) { uppercase(); } else { lowercase(); } keys[ic][nc].setForeground(new java.awt.Color(0, 0, 0)); } } else { if (!keys[ic][nc].getText().equals("")) { if (!keys[ic][nc].getText().equals(keys[ic][nc].getText().toUpperCase())) { sendKey(keys[ic][nc].getText().toUpperCase().codePointAt(0)); } else { sendShiftKey(keys[ic][nc].getText().toUpperCase().codePointAt(0)); } } } fressa.mustDisableScanTimer = false; } public void calcFrameSize() { cellWidth = panelPlaphoons.getWidth() / CELLS_X; cellHeight = panelPlaphoons.getHeight() / CELLS_Y; span = frameBorder + frameSpan; for (int i = 0; i < CELLS_X; i++) { for (int n = 0; n < CELLS_Y; n++) { keys[i][n].setVisible(false); keys[i][n].setBounds( frameSpan + cellWidth * i, frameSpan + cellHeight * n, cellWidth - frameSpan, cellHeight - frameSpan); keys[i][n].setVisible(true); } } } void lowercase() { int i = 1; int n = 0; keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("return.gif"))); full[i][n] = true; i++; keys[i][n].setText("1"); full[i][n] = true; i++; keys[i][n].setText("2"); full[i][n] = true; i++; keys[i][n].setText("3"); full[i][n] = true; i++; keys[i][n].setText("4"); full[i][n] = true; i++; keys[i][n].setText("5"); full[i][n] = true; i++; keys[i][n].setText("6"); full[i][n] = true; i++; keys[i][n].setText("7"); full[i][n] = true; i++; keys[i][n].setText("8"); full[i][n] = true; i++; keys[i][n].setText("9"); full[i][n] = true; i++; keys[i][n].setText("0"); full[i][n] = true; i++; keys[i][n].setText("'"); full[i][n] = true; i++; keys[i][n].setText("¡"); full[i][n] = true; i++; //keys[i][n].setText("bac"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("bacspace.gif"))); full[i][n] = true; i++; n++; i = 1; keys[i][n].setText("tab"); full[i][n] = true; i++; keys[i][n].setText("q"); full[i][n] = true; i++; keys[i][n].setText("w"); full[i][n] = true; i++; keys[i][n].setText("e"); full[i][n] = true; i++; keys[i][n].setText("r"); full[i][n] = true; i++; keys[i][n].setText("t"); full[i][n] = true; i++; keys[i][n].setText("y"); full[i][n] = true; i++; keys[i][n].setText("u"); full[i][n] = true; i++; keys[i][n].setText("i"); full[i][n] = true; i++; keys[i][n].setText("o"); full[i][n] = true; i++; keys[i][n].setText("p"); full[i][n] = true; i++; keys[i][n].setText("`"); full[i][n] = true; i++; keys[i][n].setText("+"); full[i][n] = true; i++; //keys[i][n].setText("Ret"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("return.gif"))); full[i][n] = true; i++; n++; i = 1; keys[i][n].setText("BM"); full[i][n] = true; i++; keys[i][n].setText("a"); full[i][n] = true; i++; keys[i][n].setText("s"); full[i][n] = true; i++; keys[i][n].setText("d"); full[i][n] = true; i++; keys[i][n].setText("f"); full[i][n] = true; i++; keys[i][n].setText("g"); full[i][n] = true; i++; keys[i][n].setText("h"); full[i][n] = true; i++; keys[i][n].setText("j"); full[i][n] = true; i++; keys[i][n].setText("k"); full[i][n] = true; i++; keys[i][n].setText("l"); full[i][n] = true; i++; keys[i][n].setText("ñ"); full[i][n] = true; //keys[i][n].setText(""); i++; keys[i][n].setText("´"); full[i][n] = true; i++; keys[i][n].setText("ç"); full[i][n] = true; //keys[i][n].setText(""); i++; //keys[i][n].setText("Ret"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("return.gif"))); full[i][n] = true; i++; n++; i = 1; keys[i][n].setText("shi"); full[i][n] = true; i++; keys[i][n].setText("<"); full[i][n] = true; i++; keys[i][n].setText("z"); full[i][n] = true; i++; keys[i][n].setText("x"); full[i][n] = true; i++; keys[i][n].setText("c"); full[i][n] = true; i++; keys[i][n].setText("v"); full[i][n] = true; i++; keys[i][n].setText("b"); full[i][n] = true; i++; keys[i][n].setText("n"); full[i][n] = true; i++; keys[i][n].setText("m"); full[i][n] = true; i++; keys[i][n].setText(","); full[i][n] = true; i++; keys[i][n].setText("."); full[i][n] = true; i++; keys[i][n].setText("-"); full[i][n] = true; i++; //keys[i][n].setText("shi"); i++; //keys[i][n].setText("A"); n++; i = 1; //keys[i][n].setText("esp"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("espai.gif"))); full[i][n] = true; i++; //keys[i][n].setText("sup"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("delete.gif"))); full[i][n] = true; i++; //keys[i][n].setText("<-"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("esquerra.gif"))); full[i][n] = true; i++; //keys[i][n].setText("->"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("dreta.gif"))); full[i][n] = true; i++; //keys[i][n].setText("|b"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("baixa.gif"))); full[i][n] = true; i++; //keys[i][n].setText("|p"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("puja.gif"))); full[i][n] = true; i++; keys[i][n].setText("<>"); //keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource( "canviactivitatfletxes.gif" ))); full[i][n] = true; Font f = keys[i][n].getFont(); keys[i][n].setFont(new Font(f.getFontName(), Font.BOLD, f.getSize())); i++; keys[i][n].setText("co"); full[i][n] = true; f = keys[i][n].getFont(); keys[i][n].setFont(new Font(f.getFontName(), Font.BOLD, f.getSize())); i++; //keys[i][n].setText(".->"); keys[i][n].setText(""); f = keys[i][n].getFont(); keys[i][n].setFont(new Font(f.getFontName(), Font.BOLD, f.getSize())); i++; } void uppercase() { int i = 1; int n = 0; //keys[i][n].setText("ª"); //keys[i][n].setText(""); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("return.gif"))); full[i][n] = true; i++; keys[i][n].setText("!"); full[i][n] = true; i++; keys[i][n].setText("\""); full[i][n] = true; i++; keys[i][n].setText("·"); full[i][n] = true; i++; keys[i][n].setText("$"); full[i][n] = true; i++; keys[i][n].setText("%"); full[i][n] = true; i++; keys[i][n].setText("&"); full[i][n] = true; i++; keys[i][n].setText("/"); full[i][n] = true; i++; keys[i][n].setText("("); full[i][n] = true; i++; keys[i][n].setText(")"); full[i][n] = true; i++; keys[i][n].setText("="); full[i][n] = true; i++; keys[i][n].setText("?"); full[i][n] = true; i++; keys[i][n].setText("¿"); full[i][n] = true; i++; //keys[i][n].setText("bac"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("bacspace.gif"))); full[i][n] = true; i++; n++; i = 1; keys[i][n].setText("tab"); full[i][n] = true; i++; keys[i][n].setText("Q"); full[i][n] = true; i++; keys[i][n].setText("W"); full[i][n] = true; i++; keys[i][n].setText("E"); full[i][n] = true; i++; keys[i][n].setText("R"); full[i][n] = true; i++; keys[i][n].setText("T"); full[i][n] = true; i++; keys[i][n].setText("Y"); full[i][n] = true; i++; keys[i][n].setText("U"); full[i][n] = true; i++; keys[i][n].setText("I"); full[i][n] = true; i++; keys[i][n].setText("O"); full[i][n] = true; i++; keys[i][n].setText("P"); full[i][n] = true; i++; keys[i][n].setText("^"); full[i][n] = true; i++; keys[i][n].setText("*"); full[i][n] = true; i++; //keys[i][n].setText("Ret"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("return.gif"))); full[i][n] = true; i++; n++; i = 1; keys[i][n].setText("BM"); full[i][n] = true; i++; keys[i][n].setText("A"); full[i][n] = true; i++; keys[i][n].setText("S"); full[i][n] = true; i++; keys[i][n].setText("D"); full[i][n] = true; i++; keys[i][n].setText("F"); full[i][n] = true; i++; keys[i][n].setText("G"); full[i][n] = true; i++; keys[i][n].setText("H"); full[i][n] = true; i++; keys[i][n].setText("J"); full[i][n] = true; i++; keys[i][n].setText("K"); full[i][n] = true; i++; keys[i][n].setText("L"); full[i][n] = true; i++; keys[i][n].setText("Ñ"); full[i][n] = true; //keys[i][n].setText(""); i++; keys[i][n].setText("¨"); full[i][n] = true; i++; keys[i][n].setText("Ç"); full[i][n] = true; //keys[i][n].setText(""); i++; //keys[i][n].setText("Ret"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("return.gif"))); full[i][n] = true; i++; n++; i = 1; keys[i][n].setText("shi"); full[i][n] = true; i++; keys[i][n].setText(">"); full[i][n] = true; i++; keys[i][n].setText("Z"); full[i][n] = true; i++; keys[i][n].setText("X"); full[i][n] = true; i++; keys[i][n].setText("C"); full[i][n] = true; i++; keys[i][n].setText("V"); full[i][n] = true; i++; keys[i][n].setText("B"); full[i][n] = true; i++; keys[i][n].setText("N"); full[i][n] = true; i++; keys[i][n].setText("M"); full[i][n] = true; i++; keys[i][n].setText(";"); full[i][n] = true; i++; keys[i][n].setText(":"); full[i][n] = true; i++; keys[i][n].setText("_"); full[i][n] = true; i++; //keys[i][n].setText("shi"); i++; n++; i = 1; //keys[i][n].setText("esp"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("espai.gif"))); full[i][n] = true; i++; //keys[i][n].setText("sup"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("delete.gif"))); full[i][n] = true; i++; //keys[i][n].setText("<-"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("esquerra.gif"))); full[i][n] = true; i++; //keys[i][n].setText("->"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("dreta.gif"))); full[i][n] = true; i++; //keys[i][n].setText("|b"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("baixa.gif"))); full[i][n] = true; i++; //keys[i][n].setText("|p"); keys[i][n].setIcon(new javax.swing.ImageIcon(this.getClass().getResource("puja.gif"))); full[i][n] = true; i++; keys[i][n].setText("<>"); full[i][n] = true; Font f = keys[i][n].getFont(); keys[i][n].setFont(boldFont); i++; keys[i][n].setText("co"); full[i][n] = true; f = keys[i][n].getFont(); keys[i][n].setFont(boldFont); i++; //keys[i][n].setText(".->"); keys[i][n].setText(""); f = keys[i][n].getFont(); keys[i][n].setFont(boldFont); i++; } }