使用前景标签将图像添加到 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的主要内容,如果未能解决你的问题,请参考以下文章
PHP 将Missing Alt标签添加到图像 - WordPress内容过滤器