#java #eclipse #swing
#java #eclipse #качать
Вопрос:
Я попытался изменить форму вкладки на изображение, которое у меня было, но оно просто добавило изображение.
Я хочу писать буквы на этом изображении, но я не знаю, что делать..
Это экран, который появляется при выполнении моего кода.
И это экран кода, который я хочу.
И вот код, который у меня есть в основе. Спасибо.
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. Вы можете добавлять изображения с текстом. Если вы хотите добавить динамический текст, вы можете добавить Textview и использовать border background, а затем добавить в него текст, а не использовать изображение.
2. Вам не нужно использовать
JTabbedPane
. У вас может быть однаJPanel
, содержащая ваши кнопки, т. Е. Событие , Набор , Сторона и т. Д., А ДругаяJPanel
с раскладкой карты . Когда вы нажимаете кнопку, показывайте связаннуюJPanel
с ней . Изменение фактических вкладок вJTabbedPane
, вероятно, будет означать создание пользовательского интерфейса
Ответ №1:
Если вы хотите, чтобы текст находился в центре изображения, вам нужно будет объединить значок и текст в один значок.
Есть несколько способов сделать это:
1) Создайте пользовательский значок
Расширьте ImageIcon так, чтобы он принимал два параметра: параметры:
- Изображение
- текст
Тогда в 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 — самый простой способ создать изображение, хотя в like показан базовый код для создания изображения метки.