使用前景标签将图像添加到 Jbutton

Posted

技术标签:

【中文标题】使用前景标签将图像添加到 Jbutton【英文标题】:Adding image to Jbutton with foreground label 【发布时间】:2012-07-10 18:44:57 【问题描述】:

朋友们,我正在尝试使用 seticon 方法将图像添加到我的 Jbutton,但它隐藏了按钮上的文本标签。这是代码:

      try 
        Image img = ImageIO.read(getClass().getResource("image.jpg"));
        studentsButton.setIcon(new ImageIcon(img));         
       catch (IOException ex) 
      

我在没有init()/paint()/graphics的eclipse中使用swing,它在main方法中的简单框架。

【问题讨论】:

1) 永远不要在没有报告的情况下捕获异常:无论是向日志还是向控制台,无论您想要什么其他报告。 2) 发布SSCCE 好的,我会记住的,谢谢 【参考方案1】:

简单地使用

studentsButton.setHorizontalTextPosition(AbstractButton.CENTER);
studentsButton.setVerticalTextPosition(AbstractButton.BOTTOM);

这只会将文本放置在图像下方。输出将是这样的:

下面是一个代码示例,以 作为输出:

import java.awt.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.*;
import javax.imageio.ImageIO;

public class ButtonImageExample

    private JButton imageButton;
    private ImageIcon image;

    private void displayGUI()
    
        JFrame frame = new JFrame("Button Image Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        try
        
            image = new ImageIcon(ImageIO.read(
                    new URL("http://i.imgur.com/6mbHZRU.png")));
        
        catch(MalformedURLException mue)
        
            mue.printStackTrace();
        
        catch(IOException ioe)
        
            ioe.printStackTrace();
               

        imageButton = new JButton("Button Text");
        imageButton.setIcon(image);
        imageButton.setHorizontalTextPosition(AbstractButton.CENTER);
        imageButton.setVerticalTextPosition(AbstractButton.BOTTOM);

        contentPane.add(imageButton);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    

    public static void main(String... args)
    
        SwingUtilities.invokeLater(new Runnable()
        
            public void run()
            
                new ButtonImageExample().displayGUI();
            
        );
    

最新编辑:关于通过 JLABEL 添加背景图像

import java.awt.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.*;
import javax.imageio.ImageIO;

public class ButtonImageExample

    private ImageIcon image, imageForLabel;
    private JLabel imageLabel;

    private JTextField userField;
    private JPasswordField passField;
    private JButton loginButton;

    private void displayGUI()
    
        JFrame frame = new JFrame("Button Image Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout(5, 5));
        try
        
            image = new ImageIcon(ImageIO.read(
                    new URL("http://i.imgur.com/jwyrvXC.gif")));
            imageForLabel = new ImageIcon(ImageIO.read(
                    new URL("http://i.imgur.com/09zgEvG.jpg")));           
        
        catch(MalformedURLException mue)
        
            mue.printStackTrace();
        
        catch(IOException ioe)
        
            ioe.printStackTrace();
               

        imageLabel = new JLabel(imageForLabel);
        JPanel basePanel = new JPanel();
        // setOpaque(false) is used to make the JPanel translucent/transparent.
        basePanel.setOpaque(false);
        basePanel.setLayout(new BorderLayout(5, 5));
        JPanel topPanel = new JPanel();     
        topPanel.setOpaque(false);
        topPanel.setLayout(new GridLayout(2, 2, 5, 5));
        JLabel userLabel = new JLabel("USERNAME : ", JLabel.CENTER);
        userLabel.setForeground(Color.WHITE);
        userField = new JTextField(10);
        JLabel passLabel = new JLabel("PASSWORD : ", JLabel.CENTER);
        passLabel.setForeground(Color.WHITE);
        passField = new JPasswordField(10);

        topPanel.add(userLabel);
        topPanel.add(userField);
        topPanel.add(passLabel);
        topPanel.add(passField);

        JPanel bottomPanel = new JPanel();
        bottomPanel.setOpaque(false);
        loginButton = new JButton("Click to LOGIN");
        loginButton.setIcon(image);
        loginButton.setHorizontalTextPosition(AbstractButton.CENTER);
        loginButton.setVerticalTextPosition(AbstractButton.BOTTOM);
        bottomPanel.add(loginButton);

        basePanel.add(topPanel, BorderLayout.CENTER);
        basePanel.add(bottomPanel, BorderLayout.PAGE_END);

        imageLabel.setLayout(new GridBagLayout());
        imageLabel.add(basePanel);

        contentPane.add(imageLabel, BorderLayout.CENTER);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    

    public static void main(String... args)
    
        SwingUtilities.invokeLater(new Runnable()
        
            public void run()
            
                new ButtonImageExample().displayGUI();
            
        );
    

这是相同的输出:

【讨论】:

你能告诉我如何在不使用子类的情况下更改 JPanel 的背景图像吗? @MachMitch 为此使用 JLabel 根据@GuillaumePolet 的建议,您可以为此使用JLabel,将其设置为Layout 并为其添加组件。给我一些时间来举例说明。 非常好的例子,但我已经设计了布局,现在将所有内容添加到 JLabel 将非常困难,因为我已经使用了 16 个 JPanel ......这将很容易为面板提供背景图像而不是弄乱整个布局

以上是关于使用前景标签将图像添加到 Jbutton的主要内容,如果未能解决你的问题,请参考以下文章

无法将图像添加到标签栏项目反应导航

将标签和图像动态添加到 Android 中的自定义视图

php 自动将Alt标签添加到WordPress图像上传

PHP 将Missing Alt标签添加到图像 - WordPress内容过滤器

是否可以将背景位置添加到 img /asp:image 标签

Java JFrame - 添加标签图像