我的程序将覆盖public void paint(Graphics g, int x, int y);
以使用g.drawString(someString, x+10, y+30);
现在someString可能会很长,因此可能不适合一行。
在多行上编写文本的最佳方法是什么。
例如,在矩形(x1,y1,x2,y2)中?
感谢Epaga的提示和网上的一些示例(查找起来并不那么明显!我主要使用Break
Line作为文本布局
),我可以制作一个组件来显示包装的文本。它是不完整的,但至少可以显示预期的效果。
class TextContainer extends JPanel
{
private int m_width;
private int m_height;
private String m_text;
private AttributedCharacterIterator m_iterator;
private int m_start;
private int m_end;
public TextContainer(String text, int width, int height)
{
m_text = text;
m_width = width;
m_height = height;
AttributedString styledText = new AttributedString(text);
m_iterator = styledText.getIterator();
m_start = m_iterator.getBeginIndex();
m_end = m_iterator.getEndIndex();
}
public String getText()
{
return m_text;
}
public Dimension getPreferredSize()
{
return new Dimension(m_width, m_height);
}
public void paint(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
FontRenderContext frc = g2.getFontRenderContext();
LineBreakMeasurer measurer = new LineBreakMeasurer(m_iterator, frc);
measurer.setPosition(m_start);
float x = 0, y = 0;
while (measurer.getPosition() < m_end)
{
TextLayout layout = measurer.nextLayout(m_width);
y += layout.getAscent();
float dx = layout.isLeftToRight() ?
0 : m_width - layout.getAdvance();
layout.draw(g2, x + dx, y);
y += layout.getDescent() + layout.getLeading();
}
}
}
只是为了好玩,我使它适合一个圆圈(看起来很不合理):
public void paint(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
FontRenderContext frc = g2.getFontRenderContext();
LineBreakMeasurer measurer = new LineBreakMeasurer(m_iterator, frc);
measurer.setPosition(m_start);
float y = 0;
while (measurer.getPosition() < m_end)
{
double ix = Math.sqrt((m_width / 2 - y) * y);
float x = m_width / 2.0F - (float) ix;
int width = (int) ix * 2;
TextLayout layout = measurer.nextLayout(width);
y += layout.getAscent();
float dx = layout.isLeftToRight() ?
0 : width - layout.getAdvance();
layout.draw(g2, x + dx, y);
y += layout.getDescent() + layout.getLeading();
}
}
我对dx计算不太确定。
我正在使用xslt转换xml文档。我需要使用输出转义来获得我的结果,因为我使用的工作服务器只会输出
我使用JSCH-SSH库在“shell”通道中执行命令,但无法找到一种方法来做两件事:- 1)如何查找命令是否在远程unix box上完全执行? 2)如何在String中捕获命令输出,而不是在System.out控制台上打印? 下面是我的代码片段,它可以很好地在系统上显示shell命令输出。出来 注意:我不想使用“exec”通道,因为它为每个命令启动一个新进程,并且不记得导出的“session”变
嗨,我的代码有一些问题,我需要接受一个3行的输入,并计算输入中“$”的数量。输入方法未注释为“scanf(”%[]s“,&userinput);”是唯一一个我发现采取所有3行输入,但我不能打破输入循环继续我的程序。 任何帮助都将不胜感激
所以我创建了这段代码,它接收一个列表并根据它们是否满足这些标准返回True或False。这是我的密码 现在我想添加一个新的转折点,即如果列表中的任何字母、数字、字符在一行中出现3次,结果将返回False。。这是我的尝试。。。 然而,这显然根本不起作用...我在这里做错了什么??我的代码应该是为了我的输出是正确的??
问题内容: 我想知道如何使用f字符串以Pythonic方式格式化这种情况: 问题是不能在f字符串的表达式部分内使用。预期产量: 问题答案: 你不能 反斜杠不能出现在花括号内;这样做会导致: 这是在PEP中为f字符串指定的: 反斜线可能不会出现在f字符串的表达式部分内,[…] 一种选择是先命名,然后再在-string内进行命名;也就是说,不使用文字: 结果是: @wim指定的另一个选项是用来获取返回
问题内容: 是否有内置方式或合理的标准软件包,可让您将标准UUID转换为短字符串,从而启用较短的URL? 即利用了较大范围的字符,例如输出较短的字符串。 我知道我们可以使用base64对字节进行编码,如下所示,但是我正在创建一个看起来像“单词”的字符串,即no 和: 问题答案: 甲通用唯一标识符(UUID)是一个128位的值,它是16个字节。对于人类可读的显示,许多系统使用规范格式,该规范格式使用