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

Incorrect rendering of tab chars inside html/pre/span

XMLWordPrintable

      FULL PRODUCT VERSION :
      1.8.0_112
      jdk9-ea+156

      ADDITIONAL OS VERSION INFORMATION :
      Windows 10

      EXTRA RELEVANT SYSTEM CONFIGURATION :
      All LAF (Windows, Metal, Nimbus) seem affected

      A DESCRIPTION OF THE PROBLEM :
      Tab chars \t seem to confuse the JLabel rendering and print some characters too far right, when rendering <pre> text, and the tab chars appear before and inside the <span> (or font) section

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Execute attached sample code

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Correct rendered pre-text
      ACTUAL -
      some chars (t = in the attached samples) rendered too far right

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Wrong rendering (can I attach a screenshot?)

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.awt.BorderLayout;

      import javax.swing.JFrame;
      import javax.swing.JLabel;
      import javax.swing.JPanel;
      import javax.swing.JScrollPane;
      import javax.swing.JTable;
      import javax.swing.table.AbstractTableModel;
      import javax.swing.table.TableModel;

      /**
       * Repro for render bug with Tab Characters inside <pre>.
       *
       * @author philipp
       */
      public class HtmlPreRenderBugRepro {

      public static void main(String[] args) {
      JFrame frame = new JFrame();
      frame.setContentPane(p());
      frame.setBounds(100, 100, 800, 300);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);

      char c = ' ';
      System.out.println((int) c);
      System.out.println((int) '\t');
      }

      static JPanel p() {
      JPanel contentPane = new JPanel();
      contentPane.setLayout(new BorderLayout());
      JTable table = new JTable(m());
      contentPane.add(new JScrollPane(table));
      contentPane.add(new JLabel("<html><pre> \t\t\t\t<span bgcolor='#aaccff'>\tt</span> = System.nanoTime();</pre></html>"), BorderLayout.NORTH);
      return contentPane;
      }

      @SuppressWarnings("serial")
      static TableModel m() {
      return new AbstractTableModel() {

      @Override
      public Object getValueAt(int rowIndex, int columnIndex) {
      return "<html><pre> \t<span>\tt</span> = System.nanoTime();</pre></html>";
      }

      @Override
      public int getRowCount() {
      return 10;
      }

      @Override
      public int getColumnCount() {
      return 1;
      }
      };
      }
      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      None that I know of

        1. HTMLTabsInSpan.java
          2 kB
        2. TabsInSpan.html
          0.6 kB
        3. HTMLTabsInSpan.png
          HTMLTabsInSpan.png
          3 kB
        4. HtmlPreRenderBugRepro.png
          HtmlPreRenderBugRepro.png
          3 kB
        5. TabsInSpan.png
          TabsInSpan.png
          0.7 kB
        6. HtmlPreRenderBugRepro.java
          2 kB

            Unassigned Unassigned
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: