Java 单击按钮将ImageIcon添加到已可见的GUI
我有点困惑为什么我的程序不起作用。当我单击按钮时,我正在尝试将图像添加到帧中。我已经用java验证了文件存在,并且它可以找到照片。我还验证了按钮是否有效。但当我编译并点击按钮时,它什么也不做……如果有人能指引我正确的方向,我将不胜感激Java 单击按钮将ImageIcon添加到已可见的GUI,java,image,swing,jframe,jpanel,Java,Image,Swing,Jframe,Jpanel,我有点困惑为什么我的程序不起作用。当我单击按钮时,我正在尝试将图像添加到帧中。我已经用java验证了文件存在,并且它可以找到照片。我还验证了按钮是否有效。但当我编译并点击按钮时,它什么也不做……如果有人能指引我正确的方向,我将不胜感激 package gamePractice; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import
package gamePractice;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
public class window {
public static void main(String[] args){
JFrame frame = new JFrame("ex");
JPanel panel = new JPanel();
JButton button = new JButton();
button.setText("Press Me");
panel.add(button);
frame.add(panel);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button) {
ImageIcon img = new ImageIcon(getClass().getResource("t.jpg"));
JLabel stickLabel = new JLabel("yes", img, SwingConstants.CENTER);
JPanel panel2 = new JPanel();
panel2.add(stickLabel);
frame.add(panel2);
}
}
});
}
}
您正在将组件添加到一个已经可见的容器中-您需要调用
LayoutManager
,然后调用revalidate
重新绘制
panel2.add(stickLabel);
frame.add(panel2);
panel2.revalidate();
panel2.repaint();
- 使用(只有一个
JComponent
可以放置到中心
区域)
- 替换
JPanel面板=新的JPanel()代码>带有JPanel面板2=新的JPanel()
,然后JButton button=newjbutton()代码>可以消失
然后有两个选项,注意使用
(正确)要将JLabel
添加到JPanel
,请使用BorderLayout
将LayoutManager
更改为JPanel
,将ImageIcon
加载到局部变量,在ActionListener
中调用JLabel.setxt()
和JLabel.setIcon()
(替换内容)调用revalidate()代码>和重新绘制()
到JFrame
,但是JPanel面板=新的JPanel()代码>带有JButton按钮=新JButton()代码>可以永远消失
非常感谢你!工作完美,但JPanel面板=新JPanel();with JButton button=new JButton();可能永远消失,因为JFrame使用BorderLayout因为没有图像图标或文本且不可见的JLabel
实际上是不可见的,所以最好将标签声明为类属性,并在帧初始化期间添加它。然后在actionPerformed(..)
方法中,设置图标。虽然可以在运行时添加组件,但这并不是最理想的方法(尤其是在这种情况下)。