![](/img/trans.png)
[英]how to build a JFrame window with a graphic area paintComponent with JTextField, JButton and JLabel?
[英]Show JLabel on a graphic drawn with paintComponent
我有一个扩展JLabel
的课程。 这个JLabel具有奇异的形状,我在paintComponent
方法中进行绘制。 我想在jLabel的中心显示一个文本,但是未显示该文本。 谁能帮我。
我的简单HLabel类如下:
private class Scudetto extends JLabel {
private static final long serialVersionUID = 1L;
public Scudetto(String line_point)
{
super(line_point, SwingUtilities.CENTER);
this.setOpaque(true);
this.setBackground(Color.BLACK);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Dimension d = this.getSize();
int[] x = { 0, d.width, d.width, d.width / 2, 0 };
int[] y = { 0, 0, d.height / 2, d.height, d.height / 2 };
g.setColor(Color.WHITE);
g.fillPolygon(x, y, 5);
g.setColor(Color.BLACK);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(10, 20);
}
}
我想在jLabel的中心显示一个文本,但是未显示该文本。
super.paintComponent()将绘制文本,但是您的自定义绘制将在文本上方绘制多边形。
不要重写JLabel。 相反,您可以创建PolygonIcon
。 然后,将Icon和文本添加到JLabel。
您可以使用以下方法将文本居中放置在标签上:
JLabel label = new JLabel("your text");
label.setIcon( polygonIcon );
label.setHorizontalTextPosition(JLabel.CENTER);
label.setVerticalTextPosition(JLabel.CENTER);
这是创建矩形图标的简单示例:
import java.awt.*;
import javax.swing.*;
public class ColorIcon implements Icon
{
private Color color;
private int width;
private int height;
public ColorIcon(Color color, int width, int height)
{
this.color = color;
this.width = width;
this.height = height;
}
public int getIconWidth()
{
return width;
}
public int getIconHeight()
{
return height;
}
public void paintIcon(Component c, Graphics g, int x, int y)
{
g.setColor(color);
g.fillRect(x, y, width, height);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI()
{
JPanel panel = new JPanel( new GridLayout(2, 2) );
for (int i = 0; i < 4; i++)
{
Icon icon = new ColorIcon(Color.RED, 50, 50);
JLabel label = new JLabel( icon );
label.setText("" + i);
label.setHorizontalTextPosition(JLabel.CENTER);
label.setVerticalTextPosition(JLabel.CENTER);
panel.add(label);
}
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(panel);
f.setSize(200, 200);
f.setLocationRelativeTo( null );
f.setVisible(true);
}
}
我将让您修改多边形的代码。
您还可以查看“ 使用形状玩”以获得一些有趣的方式来创建不同形状的图标。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.