我对我的程序无效的原因感到有点困惑。我点击按钮时试图将图像添加到框架中。我已在java中验证该文件存在且可以找到该照片。我还验证了按钮的工作原理。但是,当我编译并单击按钮时,它什么都不做......如果有人可以指导我正确的方向,那将非常感激。
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);
}
}
});
}
}
答案 0 :(得分:4)
CENTER
可以放置到JPanel panel = new JPanel();
区域)JPanel panel2 = new JPanel();
替换为JButton button = new JButton();
,然后JLabel
可以消失,然后有两个选项,请注意JPanel使用FlowLayout
(正确)将JPanel
添加到LayoutManager
,使用JPanel
将BorderLayout
更改为ImageIcon
,将ActionListener
加载到JLabel.setText()
在JLabel.setIcon()
内调用revalidate();
和repaint();
(替换内容)将JFrame
和JPanel panel = new JPanel();
调用至JButton button = new JButton();
,但/^[0-9]+(\.[0-9]{0,4})?$/
{0,4}
可以永久消失,
答案 1 :(得分:2)
您正在向已经可见的容器添加组件 - 您需要致电LayoutManager
,然后调用revalidate
repaint
了解更改
panel2.add(stickLabel);
frame.add(panel2);
panel2.revalidate();
panel2.repaint();