Вот отрывок я использовал для рисования текста в 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()
было многообещающим, но я не мог понять, что он нужен как вход.
См. «LabelRenderTest.java» через [эту тему] (http://stackoverflow.com/a/7775713/418556). Хитрость заключается в том, чтобы использовать HTML в стилизованном компоненте, таком как 'JLabel', а затем визуализировать метку. –
Используйте JTextArea. – camickr
как использовать JTestArea для этого? – ArMEd