Как настроить вкладку java tabpane?

#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 так, чтобы он принимал два параметра: параметры:

  1. Изображение
  2. текст

Тогда в 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 показан базовый код для создания изображения метки.