Java 框架仅在调用构造函数时显示
我在网上找到了这个代码。我遵从了它,它执行得很好。然后我将构造函数的一部分移动到一个方法,并创建一个我试图调用该方法的对象。我不知道我错过了什么,但画面就是不会出现。将构造函数转移到方法时有什么问题 工作Java 框架仅在调用构造函数时显示,java,swing,jframe,Java,Swing,Jframe,我在网上找到了这个代码。我遵从了它,它执行得很好。然后我将构造函数的一部分移动到一个方法,并创建一个我试图调用该方法的对象。我不知道我错过了什么,但画面就是不会出现。将构造函数转移到方法时有什么问题 工作 import java.awt.event.MouseEvent; import java.awt.event.KeyListener; import java.awt.event.KeyEvent; import java.io.IOException; im
import java.awt.event.MouseEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class MyFrame extends JFrame
{
Container cont;
JLabel label = new JLabel();
public MyFrame() throws IOException
{
setSize(300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BufferedImage img = ImageIO.read(new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg"));
System.out.println(img.toString());
label.setIcon(new ImageIcon(img));
cont = (Container) getContentPane().add(label);
cont.setFocusable(true);
InputHandler hand = new InputHandler();
cont.addKeyListener(hand);
cont.addMouseListener(hand);
cont.setBackground(Color.BLACK);
}
public class InputHandler implements KeyListener, MouseListener
{
public void keyTyped(KeyEvent kt)
{
System.out.println(kt.getKeyChar());
}
public void keyPressed(KeyEvent kp)
{
if(kp.getKeyChar() == 'w')
{
cont.setBackground(Color.PINK);
repaint();
}
}
public void keyReleased(KeyEvent kr)
{
System.out.println(kr.getKeyChar());
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Mouse CLicked");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("Mosue Pressed");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("Mosue Released");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("Mouse Entered");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("Mosue Exited");
}
}
public static void main(String[] args) throws IOException {
new MyFrame().setVisible(true);
}
}
import java.awt.event.MouseEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class MyFrame extends JFrame
{
Container cont;
JLabel label = new JLabel();
void MyFrame(){
}
public void Display() throws IOException
{
setSize(280,480);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BufferedImage img = ImageIO.read(new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg"));
System.out.println(img.toString());
label.setIcon(new ImageIcon(img));
cont = (Container) getContentPane().add(label);
cont.setFocusable(true);
InputHandler hand = new InputHandler();
cont.addKeyListener(hand);
cont.addMouseListener(hand);
cont.setBackground(Color.BLACK);
rootPane.setVisible(true);
}
public class InputHandler implements KeyListener, MouseListener
{
public void keyTyped(KeyEvent kt)
{
System.out.println(kt.getKeyChar());
}
public void keyPressed(KeyEvent kp)
{
if(kp.getKeyChar() == 'w')
{
cont.setBackground(Color.PINK);
repaint();
}
}
public void keyReleased(KeyEvent kr)
{
System.out.println(kr.getKeyChar());
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Mouse CLicked");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("Mosue Pressed");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("Mosue Released");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("Mouse Entered");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("Mosue Exited");
}
}
public static void main(String[] args) throws IOException {
MyFrame mf = new MyFrame();
mf.Display();
}
}
编辑:更改的代码(不工作)
你可能做得不对
这是有效的,并且是主要的方法。您可能做得不对
这在main方法中起作用。由于这一行,您将得到一个异常:
BufferedImage img = ImageIO.read(new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg"));
因为它无法加载它。。。因为您的计算机上可能没有此文件
要查看此工作,请删除以下行:
BufferedImage img = ImageIO.read(new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg"));
System.out.println(img.toString());
label.setIcon(new ImageIcon(img));
由于此行,您将收到一个异常:
BufferedImage img = ImageIO.read(new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg"));
因为它无法加载它。。。因为您的计算机上可能没有此文件
要查看此工作,请删除以下行:
BufferedImage img = ImageIO.read(new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg"));
System.out.println(img.toString());
label.setIcon(new ImageIcon(img));
只需替换
rootPane.setVisible(true)代码>设置为可见(真)
在Display()
方法中,它应该显示您的JFrame
只需替换rootPane.setVisible(true)代码>设置为可见(真)
在您的Display()
方法中,它应该显示您的JFrame
我没有得到任何异常。构建成功,但框架不会显示。我在那个位置也有文件。它在部件位于构造函数中时加载。因为它是运行时异常,而不是编译时异常。。所以你的代码可以编译了,我没有得到任何异常。构建成功,但框架不会显示。我在那个位置也有文件。它在部件位于构造函数中时加载。因为它是运行时异常,而不是编译时异常。。因此,您的代码将正确编译jframejf=newjframe(“JChooser”)
只会创建新的框架。JFrame jf=newjframe(“JChooser”)代码>将只创建新帧。