Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图形2D使用部分粗体文本绘制文本_Java_Graphics2d - Fatal编程技术网

Java 图形2D使用部分粗体文本绘制文本

Java 图形2D使用部分粗体文本绘制文本,java,graphics2d,Java,Graphics2d,我想知道是否可以制作部分粗体文本,例如: 请在7月21日前完成作业 我还没有尝试过任何东西,因为我只是不知道怎么做 以下是我当前用于呈现文本的代码: public void renderText(int page, String text, String font, int fontSize, Color color, int width, int height) { final Graphics2D g; if (page == 1) { g

我想知道是否可以制作部分粗体文本,例如:

请在7月21日前完成作业

我还没有尝试过任何东西,因为我只是不知道怎么做

以下是我当前用于呈现文本的代码:

public void renderText(int page, String text, String font, int fontSize, Color color, int width, int height) {
       final Graphics2D g;
       if (page == 1) {
           g = (Graphics2D) outsideFlyer.getGraphics();
           g.drawImage(outsideFlyer, 0, 0, null);
       } else {
           g = (Graphics2D) insideFlyer.getGraphics();
           g.drawImage(insideFlyer, 0, 0, null);
       }
       if (font == null) {
           g.setFont(new Font(font, Font.PLAIN, fontSize));
       } else if ("bold".equals(font)) {
           g.setFont(new Font(null, Font.BOLD, fontSize));
       } else {
           g.setFont(new Font(font, Font.PLAIN, fontSize));
       }
       g.setColor(color);
       for (String txt : text.split("\n")) {
           g.drawString(txt, width, height += g.getFontMetrics().getHeight());
       }
       g.dispose();
   }
有可能以某种方式拆分文本吗?
我希望有一些像很多网站上发生的事情,比如中间的一切*都以粗体或某种方式出现。

你必须拆分文本,用普通字体呈现第一部分,然后用粗体字体呈现第二部分。诀窍是精确计算第二部分的x位置,因此它看起来像一个文本渲染,您可以使用FontMetrics类获得文本第一部分的宽度。
outsideFlyer
insideFlyer
的类型是什么?如果它们是组件,则以错误的方式获取Graphics2D对象。您不会主动地绘制组件;等待系统创建自己的图形对象并将其传递给重写的paintComponent方法。也就是说,每行创建一个JLabel可能比自定义绘图更好;加粗字体可以在JLabel文本中使用HTML实现。您必须拆分文本,用普通字体呈现第一部分,然后用加粗字体呈现第二部分。诀窍是精确计算第二部分的x位置,因此它看起来像一个文本渲染,您可以使用FontMetrics类获得文本第一部分的宽度。
outsideFlyer
insideFlyer
的类型是什么?如果它们是组件,则以错误的方式获取Graphics2D对象。您不会主动地绘制组件;等待系统创建自己的图形对象并将其传递给重写的paintComponent方法。也就是说,每行创建一个JLabel可能比自定义绘图更好;粗体字体可以在JLabel文本中使用HTML实现。