按钮点击

时间:2016-08-02 18:29:34

标签: java image swing jframe jpanel

我对我的程序无效的原因感到有点困惑。我点击按钮时试图将图像添加到框架中。我已在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);
                      }
               }
         });
    }
}

2 个答案:

答案 0 :(得分:4)

  • JFrame使用BorderLayout(只有一个CENTER可以放置到JPanel panel = new JPanel();区域)
  • 您的ActionListenerJPanel panel2 = new JPanel();替换为JButton button = new JButton();,然后JLabel可以消失,

然后有两个选项,请注意JPanel使用FlowLayout

  1. (正确)将JPanel添加到LayoutManager,使用JPanelBorderLayout更改为ImageIcon,将ActionListener加载到JLabel.setText()JLabel.setIcon()内调用revalidate();repaint();

  2. 的局部变量
  3. (替换内容)将JFrameJPanel panel = new JPanel();调用至JButton button = new JButton();,但/^[0-9]+(\.[0-9]{0,4})?$/ {0,4}可以永久消失,

    < / LI>

答案 1 :(得分:2)

您正在向已经可见的容器添加组件 - 您需要致电LayoutManager,然后调用revalidate

,让repaint了解更改
panel2.add(stickLabel);
frame.add(panel2);
panel2.revalidate();
panel2.repaint();