Crossfire JXClient, Trunk
GUIMultiLineLabel.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2005-2008 Yann Chachkoff
19  * Copyright (C) 2006-2017,2019-2023 Andreas Kirschbaum
20  * Copyright (C) 2010-2012,2014-2018,2020-2023 Nicolas Weeger
21  */
22 
23 package com.realtime.crossfire.jxclient.gui.label;
24 
30 import java.awt.Color;
31 import java.awt.Dimension;
32 import java.awt.Font;
33 import java.awt.FontMetrics;
34 import java.awt.Graphics;
35 import java.awt.Graphics2D;
36 import java.awt.image.BufferedImage;
37 import java.util.regex.Pattern;
38 import org.jetbrains.annotations.NotNull;
39 import org.jetbrains.annotations.Nullable;
40 
46 public class GUIMultiLineLabel extends GUILabel {
47 
51  private static final long serialVersionUID = 1;
52 
56  @NotNull
57  private static final Pattern LINE_SEPARATOR_PATTERN = Pattern.compile(" *\n");
58 
62  @NotNull
63  private String @NotNull [] lines;
64 
78  public GUIMultiLineLabel(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @Nullable final BufferedImage picture, @NotNull final Font textFont, @NotNull final Color textColor, @Nullable final Color backgroundColor, @NotNull final Alignment alignment, @NotNull final String text, @NotNull final GuiFactory guiFactory) {
80  lines = LINE_SEPARATOR_PATTERN.split(getText(), -1);
81  }
82 
83  @Override
84  protected void textChanged() {
85  lines = LINE_SEPARATOR_PATTERN.split(getText(), -1);
86  super.textChanged();
87  }
88 
89  @Override
90  public void paintComponent(@NotNull final Graphics g) {
91  super.paintComponent(g);
92 
93  if (lines.length <= 0) {
94  return;
95  }
96 
97  final Graphics2D g2 = (Graphics2D)g;
98  final Dimension rectangle = GuiUtils.getTextDimension("Xg", getFontMetrics(getTextFont()));
99  final int lineHeight = rectangle.height;
100 
101  int y = 0;
102  for (String line : lines) {
103  drawLine(g2, y, lineHeight, line);
104  y += lineHeight;
105  }
106  }
107 
108  @Nullable
109  @Override
110  @SuppressWarnings("MethodDoesntCallSuperMethod")
111  public Dimension getPreferredSize() {
112  return getTextSize();
113  }
114 
115  @Nullable
116  @Override
117  @SuppressWarnings("MethodDoesntCallSuperMethod")
118  public Dimension getMinimumSize() {
119  return getTextSize();
120  }
121 
127  @NotNull
128  private Dimension getTextSize() {
129  final FontMetrics fontMetrics = getFontMetrics(getTextFont());
130 
131  int width = 0;
132  for (String line : lines) {
133  final Dimension dimension = GuiUtils.getTextDimension(line, fontMetrics);
134  if (width < dimension.width) {
135  width = dimension.width;
136  }
137  }
138 
139  final Dimension rectangle = GuiUtils.getTextDimension("Xg", fontMetrics);
140  final int height = lines.length*rectangle.height;
141 
142  return new Dimension(width, height);
143  }
144 
145  @Override
146  public void notifyOpen() {
147  }
148 
149  @Nullable
150  @Override
152  return null;
153  }
154 
155 }
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.name
final String name
Definition: AbstractGUIElement.java:77
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel.LINE_SEPARATOR_PATTERN
static final Pattern LINE_SEPARATOR_PATTERN
Definition: GUIMultiLineLabel.java:57
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel.getTooltip
TooltipText getTooltip()
Definition: GUIMultiLineLabel.java:151
com.realtime.crossfire.jxclient.gui.label.AbstractLabel.text
String text
Definition: AbstractLabel.java:54
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel.getMinimumSize
Dimension getMinimumSize()
Definition: GUIMultiLineLabel.java:118
com.realtime.crossfire.jxclient.gui.label.GUILabel
Definition: GUILabel.java:40
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.gui.gui.GuiUtils.getTextDimension
static Dimension getTextDimension(@NotNull final String text, @NotNull final FontMetrics fontMetrics)
Definition: GuiUtils.java:50
com.realtime.crossfire.jxclient.gui.label.Alignment
Definition: Alignment.java:29
com.realtime.crossfire.jxclient.gui.gui.GuiUtils
Definition: GuiUtils.java:34
com.realtime.crossfire.jxclient.gui.label.AbstractLabel.textFont
final Font textFont
Definition: AbstractLabel.java:60
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel.notifyOpen
void notifyOpen()
Definition: GUIMultiLineLabel.java:146
com.realtime.crossfire.jxclient.gui.label.GUILabel.drawLine
void drawLine(@NotNull final Graphics2D g, final int y0, final int h0, @NotNull final String text)
Definition: GUILabel.java:85
com.realtime.crossfire.jxclient.gui.label.AbstractLabel.getTextFont
Font getTextFont()
Definition: AbstractLabel.java:160
com.realtime.crossfire.jxclient.gui.label.AbstractLabel.backgroundColor
final Color backgroundColor
Definition: AbstractLabel.java:85
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel.paintComponent
void paintComponent(@NotNull final Graphics g)
Definition: GUIMultiLineLabel.java:90
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel
Definition: GUIMultiLineLabel.java:46
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.elementListener
final GUIElementListener elementListener
Definition: AbstractGUIElement.java:89
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel.lines
String[] lines
Definition: GUIMultiLineLabel.java:63
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.gui.gui.TooltipText
Definition: TooltipText.java:31
com.realtime.crossfire
com.realtime
com
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel.getPreferredSize
Dimension getPreferredSize()
Definition: GUIMultiLineLabel.java:111
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel.serialVersionUID
static final long serialVersionUID
Definition: GUIMultiLineLabel.java:51
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
Definition: AbstractGUIElement.java:48
com.realtime.crossfire.jxclient.gui.label.AbstractLabel.getText
String getText()
Definition: AbstractLabel.java:151
com.realtime.crossfire.jxclient.gui.label.AbstractLabel.textColor
final Color textColor
Definition: AbstractLabel.java:66
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel.textChanged
void textChanged()
Definition: GUIMultiLineLabel.java:84
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel.getTextSize
Dimension getTextSize()
Definition: GUIMultiLineLabel.java:128
com.realtime.crossfire.jxclient.gui.gui.GUIElementListener
Definition: GUIElementListener.java:32
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipManager
final TooltipManager tooltipManager
Definition: AbstractGUIElement.java:83
com.realtime.crossfire.jxclient.gui.label.GUIMultiLineLabel.GUIMultiLineLabel
GUIMultiLineLabel(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, @Nullable final BufferedImage picture, @NotNull final Font textFont, @NotNull final Color textColor, @Nullable final Color backgroundColor, @NotNull final Alignment alignment, @NotNull final String text, @NotNull final GuiFactory guiFactory)
Definition: GUIMultiLineLabel.java:78