【问题标题】:Painting Yellow on White using Java Graphics使用 Java 图形在白色上绘制黄色
【发布时间】:2014-01-13 16:02:29
【问题描述】:

我的应用程序使用灰度“热图”执行数据可视化。在它上面我需要用黄色绘制时间轴。它在黑色背景上看起来不错,但在白色背景上变得不可见(见附图)。无论背景如何,如何使其可见?

这是我绘制时间戳的方式:

g.setColor(Color.yellow);
g.drawString("12:43:15", x, y);

g 是 java.awt.Graphics 对象

【问题讨论】:

    标签: java swing graphics


    【解决方案1】:

    XOR'ing 你的颜色怎么样。例如,

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    
    import javax.swing.*;
    
    @SuppressWarnings("serial")
    public class XorEg extends JPanel {
       private static final int PREF_W = 800;
       private static final int PREF_H = PREF_W / 4;
       private static final float SIZE = 24f;
       private String text = "Hello world, how's it going? ";
    
       public XorEg() {
          setFont(getFont().deriveFont(SIZE));
          for (int i = 0; i < 2; i++) {
             text += text;
          }
       }
    
       @Override
       protected void paintComponent(Graphics g) {
          super.paintComponent(g);
          g.setColor(Color.black);
          int x = 0;
          int y = 0;
          int width = getWidth() / 2;
          int height = getHeight();
          g.fillRect(x, y, width, height);
    
          g.setColor(Color.white);
          x = width;
          g.fillRect(x, y, width, height);
    
          g.setXORMode(Color.blue);
    
          g.drawString(text, 10, PREF_H / 2);
       }
    
       @Override
       public Dimension getPreferredSize() {
          return new Dimension(PREF_W, PREF_H);
       }
    
       private static void createAndShowGui() {
          XorEg mainPanel = new XorEg();
    
          JFrame frame = new JFrame("XorEg");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.getContentPane().add(mainPanel);
          frame.pack();
          frame.setLocationByPlatform(true);
          frame.setVisible(true);
       }
    
       public static void main(String[] args) {
          SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                createAndShowGui();
             }
          });
       }
    }
    

    其中显示:

    【讨论】:

      【解决方案2】:

      您可以“勾勒”文本(例如黑色)

      例如...

      Assigning a image to a String中所示

      【讨论】:

        【解决方案3】:

        在文本后面放置一个矩形,并将其涂成深色半透明颜色。

        例如如this answer 中所见(好吧,这是“黑暗中的黑暗”而不是“黑暗中的光明”,但..不包括电池)。

        这里是another example,它使用与@MadProgrammer 提到的相同的“大纲”方法。

        【讨论】:

          【解决方案4】:

          使用另一种适合黑白的颜色,或者检测较低的颜色并在此基础上更改文本颜色,这是一种更好的方法

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-07
            • 2013-04-06
            • 1970-01-01
            • 2021-09-28
            • 1970-01-01
            相关资源
            最近更新 更多