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

[from LICENSEE]sun.java2d.SunGraphics2D.drawString doesn't allow Japanese char.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P1 P1
    • None
    • 1.1.4, 1.2.0
    • client-libs
    • 2d
    • x86, sparc
    • solaris_2.5.1, windows_nt



      Name: paC48320 Date: 10/15/97


      I am a licensee(Oki Electric Industry Co., Ltd.).

      sun.java2d.SunGraphics2D.drawString doesn't allow Japanese charcters.
      I am using JTextArea of Swing-0.5 on JDK 1.2P.
      But I caught following Exception.

      Exception occurred during event dispatching:
      java.lang.ArrayIndexOutOfBoundsException: 6
              at java.awt.Font.getGlyphSet(Font.java:1213)
              at java.awt.Font.getGlyphSet(Font.java:1256)
              at java.awt.font.StyledString.getGlyphSets(StyledString.java:277)
              at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:1126)
              at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:597)
              at java.awt.Graphics.drawChars(Graphics.java:770)
              at com.sun.java.swing.text.Utilities.drawTabbedText(Utilities.java:76)
              at com.sun.java.swing.text.PlainView.drawLine(PlainView.java:394)
              at com.sun.java.swing.text.PlainView.paint(PlainView.java:162)
              at com.sun.java.swing.text.DefaultTextUI$RootView.paint(DefaultTextUI.java:549)
              at com.sun.java.swing.text.DefaultTextUI.paint(DefaultTextUI.java:293)
              at com.sun.java.swing.JComponent.paintComponent(JComponent.java:341)
              at com.sun.java.swing.JComponent.paint(JComponent.java:507)
              at com.sun.java.swing.JComponent.paintChildren(JComponent.java:397)
              at com.sun.java.swing.JComponent.paint(JComponent.java:510)
              at com.sun.java.swing.JComponent.paintWithBuffer(JComponent.java:2774)
              at com.sun.java.swing.JComponent._paintImmediately(JComponent.java:2740)
              at com.sun.java.swing.JComponent.paintImmediately(JComponent.java:2661)
              at com.sun.java.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:283)
              at com.sun.java.swing.RepaintManager.actionPerformed(RepaintManager.java:214)
              at com.sun.java.swing.Timer.fireActionPerformed(Timer.java:113)
              at com.sun.java.swing.Timer$DummyComponent.processEvent(Timer.java:288)
              at java.awt.Component.dispatchEventImpl(Component.java:1908)
              at java.awt.Component.dispatchEvent(Component.java:1823)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:160)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:45)
      Exception occurred during event dispatching:
      java.lang.ArrayIndexOutOfBoundsException: 6
              at java.awt.Font.getGlyphSet(Font.java:1213)
              at java.awt.Font.getGlyphSet(Font.java:1256)
              at java.awt.font.StyledString.getGlyphSets(StyledString.java:277)
              at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:1126)
              at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:597)
              at java.awt.Graphics.drawChars(Graphics.java:770)
              at com.sun.java.swing.text.Utilities.drawTabbedText(Utilities.java:76)
              at com.sun.java.swing.text.PlainView.drawLine(PlainView.java:394)
              at com.sun.java.swing.text.PlainView.paint(PlainView.java:162)
              at com.sun.java.swing.text.DefaultTextUI$RootView.paint(DefaultTextUI.java:549)
              at com.sun.java.swing.text.DefaultTextUI.paint(DefaultTextUI.java:293)
              at com.sun.java.swing.JComponent.paintComponent(JComponent.java:341)
              at com.sun.java.swing.JComponent.paint(JComponent.java:507)
              at com.sun.java.swing.JComponent.paintChildren(JComponent.java:397)
              at com.sun.java.swing.JComponent.paint(JComponent.java:495)
              at java.awt.Container.paint(Container.java:696)
              at java.awt.Component.dispatchEventImpl(Component.java:1864)
              at java.awt.Container.dispatchEventImpl(Container.java:934)
              at java.awt.Window.dispatchEventImpl(Window.java:462)
              at java.awt.Component.dispatchEvent(Component.java:1823)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:160)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:45)
      Exception occurred during event dispatching:
      java.lang.ArrayIndexOutOfBoundsException: 6
              at java.awt.Font.getGlyphSet(Font.java:1213)
              at java.awt.Font.getGlyphSet(Font.java:1256)
              at java.awt.font.StyledString.getGlyphSets(StyledString.java:277)
              at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:1126)
              at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:597)
              at java.awt.Graphics.drawChars(Graphics.java:770)
              at com.sun.java.swing.text.Utilities.drawTabbedText(Utilities.java:76)
              at com.sun.java.swing.text.PlainView.drawLine(PlainView.java:394)
              at com.sun.java.swing.text.PlainView.paint(PlainView.java:162)
              at com.sun.java.swing.text.DefaultTextUI$RootView.paint(DefaultTextUI.java:549)
              at com.sun.java.swing.text.DefaultTextUI.paint(DefaultTextUI.java:293)
              at com.sun.java.swing.JComponent.paintComponent(JComponent.java:341)
              at com.sun.java.swing.JComponent.paint(JComponent.java:507)
              at com.sun.java.swing.JComponent.paintChildren(JComponent.java:397)
              at com.sun.java.swing.JComponent.paint(JComponent.java:495)
              at java.awt.Container.paint(Container.java:696)
              at java.awt.Component.update(Component.java:1380)
              at java.awt.Container.update(Container.java:718)
              at java.awt.Component.dispatchEventImpl(Component.java:1866)
              at java.awt.Container.dispatchEventImpl(Container.java:934)
              at java.awt.Window.dispatchEventImpl(Window.java:462)
              at java.awt.Component.dispatchEvent(Component.java:1823)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:160)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:45)
      Exception occurred during event dispatching:
      java.lang.ArrayIndexOutOfBoundsException: 6
              at java.awt.Font.getGlyphSet(Font.java:1213)
              at java.awt.Font.getGlyphSet(Font.java:1256)
              at java.awt.font.StyledString.getGlyphSets(StyledString.java:277)
              at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:1126)
              at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:597)
              at java.awt.Graphics.drawChars(Graphics.java:770)
              at com.sun.java.swing.text.Utilities.drawTabbedText(Utilities.java:76)
              at com.sun.java.swing.text.PlainView.drawLine(PlainView.java:394)
              at com.sun.java.swing.text.PlainView.paint(PlainView.java:162)
              at com.sun.java.swing.text.DefaultTextUI$RootView.paint(DefaultTextUI.java:549)
              at com.sun.java.swing.text.DefaultTextUI.paint(DefaultTextUI.java:293)
              at com.sun.java.swing.JComponent.paintComponent(JComponent.java:341)
              at com.sun.java.swing.JComponent.paint(JComponent.java:507)
              at com.sun.java.swing.JComponent.paintChildren(JComponent.java:397)
              at com.sun.java.swing.JComponent.paint(JComponent.java:495)
              at java.awt.Container.paint(Container.java:696)
              at java.awt.Component.dispatchEventImpl(Component.java:1864)
              at java.awt.Container.dispatchEventImpl(Container.java:934)
              at java.awt.Window.dispatchEventImpl(Window.java:462)
              at java.awt.Component.dispatchEvent(Component.java:1823)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:160)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:45)

      My test program is following.

      import java.awt.*;
      import java.awt.event.*;
      import com.sun.java.swing.*;

      public class JTextAreaTest {
          public static void main(String args[]) {
              Frame frame = new Frame("JTextArea Test");
              frame.setLayout(new FlowLayout());
              frame.addWindowListener(new WindowAdapter() {
                  public void windowClosing(WindowEvent e) {
                      System.exit(0);
                  }
              });

              MenuBar menuBar = new MenuBar();
              Menu menu = new Menu("File");
              MenuItem quitMenuItem = new MenuItem("Quit");
              quitMenuItem.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                      System.exit(0);
                  }
              });
              menu.add(quitMenuItem);
              menuBar.add(menu);
              frame.setMenuBar(menuBar);

              JPanel panel = new JPanel();
              JTextArea textArea = new JTextArea(3,3);
              //textArea.setFont(new Font("SansSerif", Font.PLAIN, 14));
              textArea.setText("\u3053\u308c\u306f\u3001is\na JTextArea.\n");
              textArea.append("But it\ncannot scroll.\n");
              panel.add(textArea);
              frame.add(panel);
              frame.pack();
              frame.setVisible(true);
          }
      }

      Command is following.
      java -classpath $SWINGHOME/swing.jar:$SWINGHOME/rose.jar:$JDK12HOME/lib/classes.zip JTextAreaTest
      ======================================================================
      There are some reasons for this problem.

      1. Japanese TrueType fonts in Windows have the
      filename extension of ".ttc", e.g., msmincho.ttc.
      But the code in sun.awt.font.FontObjectCollection
      does not list up such fonts.

      2. There is a hard-coded value "Times-Roman" and "Ariel" in
      sun.java2d.SunGraphicsEnvironment#getAllFonts() for
      the defaultFont.

      3. There are hard-coded values as follows, in
      sun.awt.font.SfntAccess#getFontFullName()

          platform=1
          specific=0
          language=0

      and in sun.awt.font.SfntAccess#canDisplay()

          return c < 256;
      ronan.mandel@Eng 1998-01-23

            jkaulorcl Jeet Kaul (Inactive)
            pallenba Peter Allenbach (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: