Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4799500

dead key pressed/released twice should produce non-dead character on Unix

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Icon: P4 P4
    • None
    • 1.4.2
    • client-libs
    • x86
    • linux_redhat_6.1

      Non-Java applications can produce ascii versions of dead keys by typing
      the dead key twice in a row. For example, in a German xmodmap, dead-acute pressed and released twice produces apostrophe. dead-circumflex pressed and released twice produces ascii circumflex.

      The test case below can be used to see that this does not work in JDK1.4.2
      with lightweight TextComponents (including Swing).

      import java.awt.*;
      import java.awt.event.*;
      import javax.swing.*;

      public class MySwingTest extends JApplet implements KeyListener, ActionListener {

          JTextField jtf = null;
          JTextArea jta = null;

          public static void main(String[] args) {
              JFrame frame = new JFrame("MySwingTest");
              JPanel p = new JPanel();

              MySwingTest applet = new MySwingTest();
              applet.init();

              p.add("Center", applet);
              frame.getContentPane().add(p);

              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              frame.pack();
              frame.setSize(850, 200);
              frame.setVisible(true);

              applet.start();
          }

          public void init() {
              JLabel jl = new JLabel("Enter characters");

              jtf = new JTextField("Hello World", 20);
              jtf.addKeyListener(this);
              jtf.addActionListener(this);
              jta = new JTextArea("Hello World", 4, 30);
              jta.addKeyListener(this);

              // the default layout manager for a JApplet is a BorderLayout
              this.getContentPane().setLayout(new FlowLayout());
              this.getContentPane().add(jl, FlowLayout.LEFT);
              this.getContentPane().add(jtf, FlowLayout.CENTER);
              this.getContentPane().add(jta, FlowLayout.RIGHT);
          }

          public void start() {
              jtf.requestFocus();
          }

          public void keyPressed(KeyEvent evt)
          {
              printKey(evt);
          }

          public void keyTyped(KeyEvent evt)
          {
              printKey(evt);
          }

          public void keyReleased(KeyEvent evt)
          {
              printKey(evt);
              System.out.print("\n");
          }

          public void actionPerformed(ActionEvent evt)
          {
              System.out.print("\n");
              System.out.print("Action Event\n");
              System.out.println(evt.toString());
              System.out.print("\n");
          }

          protected void printKey(KeyEvent evt)
          {
              switch(evt.getID())
              {
                case KeyEvent.KEY_TYPED:
                  break;
                case KeyEvent.KEY_PRESSED:
                  break;
                case KeyEvent.KEY_RELEASED:
                  break;
                default:
                  System.out.println("Other Event ");
                  return;
              }

              System.out.print("params= " + evt.paramString() + " \n" +
                "KeyChar: " + evt.getKeyChar() + " = " + (int) evt.getKeyChar() +
                " KeyCode: " + evt.getKeyCode() +
                " Modifiers: " + evt.getModifiers());
              if (evt.isActionKey())
                  System.out.print(" Action Key");
              System.out.print("\n");

              System.out.println("keyText= " + evt.getKeyText(evt.getKeyCode())
                + "\n");
          }

      }

            yan Yuri Nesterenko
            ehawkessunw Eric Hawkes (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: