#java #swing #jframe
#ява #качели #jфрейм #swing #jframe
Вопрос:
Я нашел этот код в Интернете. Я выполнил его, и он выполняется нормально. Затем я переместил часть конструктора в метод и, создав объект, попытался вызвать метод. Я не знаю, чего мне не хватает, но Рамка просто не появляется. Что не так при переносе конструктора в метод?
Работающий
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();
}
}
Ответ №1:
Просто замените rootPane.setVisible(true);
на setVisible(true);
в вашем Display()
методе, и он должен отобразить ваш JFrame
.
Ответ №2:
вы получаете исключение из-за этой строки:
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));
Комментарии:
1. Я не получил никакого исключения. Сборка выполнена успешно, но рамка не будет отображаться. Также у меня есть файл в этом месте. Он загружается, когда деталь находится в конструкторе.
2. потому что это исключение во время выполнения, а не исключение во время компиляции.. таким образом, ваш код будет скомпилирован нормально
Ответ №3:
Вероятно, вы сделали это неправильно.
http://download.oracle.com/javase/6/docs/api/javax/swing/JFrame.html
public static void main(String [] args){
JFrame jf = new JFrame("JChooser");
jf.setSize(400,400);
jf.setVisible(true);
}
Это работает, и это в основном методе.
Комментарии:
1.
JFrame jf = new JFrame("JChooser");
просто создаст новый фрейм.