Подсказка для собственных рисунков - PullRequest
2 голосов
/ 03 апреля 2012

мое java-приложение содержит JPanel, на котором я рисую определенные фигуры. Теперь я хотел бы пометить эти фигуры какими-то подсказками.

Поэтому я попытался создать свои собственные «всплывающие подсказки» с помощью метода drawString, setBackground, setColor .:

public void drawToolTip(Graphics2D graphics, String text, Point2D position) {
    graphics.setBackground(Color.RED);
    graphics.setColor(Color.GREEN);
    graphics.drawString(text, (float) position.getX(), (float) position.getY());
}

К сожалению, метод setBackground не работает. Фон текста остается прозрачным, хотя я установил его на красный. setColor и drawString просто отлично работают.

Мои вопросы:

  • В чем может быть причина того, что метод setBackground не работает?
  • Есть ли возможность нарисовать границу вокруг текста без drawRect?
  • Если я хочу использовать метод drawRect в качестве замены для рисования фона и границы текста: как я могу сделать так, чтобы он автоматически подходил к написанному тексту? Или, другими словами, как я могу получить размеры конкретного текста?

С уважением, Марк

Ответы [ 3 ]

4 голосов
/ 03 апреля 2012
  • Graphics2D.drawString() по умолчанию не рисует фон.Вам придется сделать это самостоятельно.

  • Вы можете использовать drawRect() для рисования границы линии или fillRec() для рисования сплошного прямоугольника.

  • У Oracle есть отличное учебное пособие по измерению ширины строк.По сути, вам нужно создать java.awt.Font, затем получить его FontMetrics и использовать его для вычисления ширины и высоты вашей строки.

3 голосов
/ 03 апреля 2012

Вы не можете изменить цвет фона, как вы ожидаете, используя graphics.setBackground(..) вызов. Установка цвета фона в Graphics2D влияет только на вызовы clearRect или fillRect, а не на цвет фона компонента.

Чтобы нарисовать прямоугольник в желаемом месте с задним фоном, вам нужно будет выполнить следующие действия:

  1. Определить прямоугольник - r
  2. grpahics.setPaint() для фона и
  3. graphics.fill(r) graphcis.setPaint() для границы и
  4. graphics.draw(r) чтобы нарисовать границу

Теперь в прямоугольник приходит трудная часть рисования текста, которая включает в себя вычисление высоты и т. Д. На основе FontMetrics шрифта, который вы установили бы для рисования текста. Я погуглил и нашел для тебя пример здесь

3 голосов
/ 03 апреля 2012

Простая реализация будет включать рисование на объекте Graphics значка JLabel. А затем просто добавьте текст всплывающей подсказки к компоненту Swing.

Для получения дополнительной информации см. Как использовать подсказки для инструментов .

...