java - 如何自定义 java tabpane 的选项卡?
问题描述
我试图将标签形状更改为我拥有的图像,但它只是添加了一个图像。
我想在这张图片中写信,但我不知道该怎么做..
这是当你执行我的代码时出现的屏幕。
这就是我想要的代码屏幕。
这是我的核心代码。谢谢你。
import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;
import img.imageSetSize;
public class tabPane extends JFrame {
Container c = getContentPane();
public tabPane() {
imageSetSize s = new imageSetSize();
setTitle("Kiosk");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c.setLayout(new BorderLayout());
JPanel panelW = new JPanel();
panelW.setLayout(new GridLayout(1, 5, 5, 5));
panelW.setBackground(Color.WHITE);
ImageIcon normalMenuIcon = new ImageIcon("images/UI/normalMenu.png");
normalMenuIcon = s.setSize(normalMenuIcon, 80, 80);
JTabbedPane menuTab = new JTabbedPane(JTabbedPane.LEFT);
menuTab.addTab("", normalMenuIcon, new ItemPanel1());
menuTab.addTab("", normalMenuIcon, new ItemPanel1());
menuTab.addTab("", normalMenuIcon, new ItemPanel1());
menuTab.addTab("", normalMenuIcon, new ItemPanel1());
menuTab.addTab("", normalMenuIcon, new ItemPanel1());
menuTab.setBackground(null);
panelW.add(menuTab);
c.add(panelW, BorderLayout.WEST);
c.setBackground(Color.WHITE);
setSize(450, 740);
setVisible(true);
setResizable(true);
}
public class imageSetSize {
public ImageIcon setSize(ImageIcon icon, int x, int y) {
Image img = icon.getImage();
Image imgScale = img.getScaledInstance(x, y, java.awt.Image.SCALE_SMOOTH);
ImageIcon imgScaled = new ImageIcon(imgScale);
return imgScaled;
}
}
class ItemPanel1 extends JPanel { //implement later
public ItemPanel1() {
this.setBackground(Color.white);
this.setLayout(new GridLayout(3, 3, 0, 0));
}
}
public static void main(String[] args) {
tabPane tp = new tabPane();
}
}
解决方案
如果您想在图像的中心显示文本,则需要将图标和文本组合成一个图标。
做这件事有很多种方法:
1)创建自定义图标
扩展 ImageIcon 使其具有两个参数:parameters:
- 图片
- 文本
然后在该paintIcon(...)
方法中,您的代码可能类似于:
class TextImageIcon extends ImageIcon
{
String text;
public TextImageIcon(String text, Image image)
{
super(image);
this.text = text;
}
public void paintIcon(Component c, Graphics g, int x, int y)
{
super.paintIcon(c, g, x, y); // paint the image
// add text centered on the image
FontMetrics fm = g.getFontMetrics();
int stringWidth = fm.stringWidth( text );
int textX = (getIconWidth() - stringWidth) / 2;
int textY = getIconHeight() / 2;
g.drawString(text, textX, textY)
}
)
2) 创建一个 JLabel 的图像
JLabel 允许您以图标为中心显示文本。因此,您可以让 JLabel 来工作,而不是自己进行自定义绘制。创建标签后,您可以创建标签的图像以用作图标。
基本代码将类似于:
JLabel label = new JLabel("your text");
label.setIcon( yourIcon );
label.setHorizontalTextPosition(JLabel.CENTER);
label.setVerticalTextPosition(JLabel.CENTER);
BufferedImage image = ScreenImage.createImage( label );
ImageIcon iconWithText = new ImageIcon( image );
使用Screen Image类是创建图像的最简单方法,尽管类似的类确实向您展示了创建标签图像的基本代码。
推荐阅读
- python - 在 python 中寻找一些关于组合学的指导
- html - Angular:无法使用 ng-style 指令设置背景封面
- python - 在一条消息中列出角色成员 - discord.py 重写
- opengl - 如何在 GLSL 中复制一个正方形来制作图案?
- flutter - 如何避免基于 chart_flutter DateTime 的系列列表的运行时类型异常?
- google-apps-script - 如何让非授权用户保护电子表格
- node.js - 无法使用 Lambda 函数将数据插入 AWS DynamoDB 表
- python - 使用 url 作为参数时,opencv videocapture 如何工作?
- android - RecyclerView 宽度中的 TextView 溢出
- php - 如何只输入一个单词就可以访问链接?