2011-12-30 3 views
4

Это именно то, что я пытаюсь сделать:разрыв строки в g.drawString в Java SE

Graphics2D g2 = (Graphics2D) g; 
g2.setFont(new Font("Serif", Font.PLAIN, 5)); 
g2.setPaint(Color.black); 
g2.drawString("Line 1\nLine 2", x, y); 

эта линия печатает так:

Line1Line2 

Я хочу, чтобы это так:

Line1 
Line2 

Как это сделать в drawString?

Как я могу сделать вкладку для строки?

+0

См. «LabelRenderTest.java» через [эту тему] (http://stackoverflow.com/a/7775713/418556). Хитрость заключается в том, чтобы использовать HTML в стилизованном компоненте, таком как 'JLabel', а затем визуализировать метку. –

+0

Используйте JTextArea. – camickr

+0

как использовать JTestArea для этого? – ArMEd

ответ

5
 





     private void drawString(Graphics g, String text, int x, int y) { 
       for (String line : text.split("\n")) 
        g.drawString(line, x, y += g.getFontMetrics().getHeight()); 
      } 

     private void drawtabString(Graphics g, String text, int x, int y) { 
      for (String line : text.split("\t")) 
       g.drawString(line, x += g.getFontMetrics().getHeight(), y); 
     } 


      Graphics2D g2 = (Graphics2D) g; 
      g2.setFont(new Font("Serif", Font.PLAIN, 5)); 
      g2.setPaint(Color.black); 
      drawString(g2,"Line 1\nLine 2", 120, 120); 
      drawtabString(g2,"Line 1\tLine 2", 130, 130); 

+0

Как я могу сделать вкладку для этого? – ArMEd

+0

http://www.java2s.com/Tutorial/Java/0300__SWT-2D-Graphics/Drawstringanddisplaynewlinesandtabsasnonprintablecharacters.htm – Rupok

+0

Я не могу это понять. – ArMEd

0

Вот отрывок я использовал для рисования текста в JPanel с расширением вкладок и несколько строк:

import javax.swing.*; 
import java.awt.*; 
import java.awt.geom.Rectangle2D; 

public class Scratch { 
    public static void main(String argv[]) { 
     JFrame frame = new JFrame("FrameDemo"); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel panel = new JPanel() { 
      @Override 
      public void paint(Graphics graphics) { 
       graphics.drawRect(100, 100, 1, 1); 
       String message = 
         "abc\tdef\n" + 
         "abcx\tdef\tghi\n" + 
         "xxxxxxxxdef\n" + 
         "xxxxxxxxxxxxxxxxghi\n"; 
       int x = 100; 
       int y = 100; 
       FontMetrics fontMetrics = graphics.getFontMetrics(); 
       Rectangle2D tabBounds = fontMetrics.getStringBounds(
         "xxxxxxxx", 
         graphics); 
       int tabWidth = (int)tabBounds.getWidth(); 
       String[] lines = message.split("\n"); 
       for (String line : lines) { 
        int xColumn = x; 
        String[] columns = line.split("\t"); 
        for (String column : columns) { 
         if (xColumn != x) { 
          // Align to tab stop. 
          xColumn += tabWidth - (xColumn-x) % tabWidth; 
         } 
         Rectangle2D columnBounds = fontMetrics.getStringBounds(
           column, 
           graphics); 
         graphics.drawString(
           column, 
           xColumn, 
           y + fontMetrics.getAscent()); 
         xColumn += columnBounds.getWidth(); 
        } 
        y += fontMetrics.getHeight(); 
       } 
      } 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(400, 200); 
      } 
     }; 
     frame.getContentPane().add(panel, BorderLayout.CENTER); 

     frame.pack(); 

     frame.setVisible(true); } 
} 

Это действительно казалось, что Utilities.drawTabbedText() было многообещающим, но я не мог понять, что он нужен как вход.

 Смежные вопросы

  • Нет связанных вопросов^_^