프로그램 실행 중에 여러 번 이미지를 다시로드해야하는 응용 프로그램을 만들었습니다. 아마 그것은 어색하지만, 구현은 하위 클래스에서 Component 클래스를 확장하고 fileName 인수를 통해 이미지를 생성자로 다시로드하는 것입니다. 아래 코드는 포함되어Java의 시각적 구성 요소 구성 중 포커스 방지
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;
public class Grapher {
private static JFrame frame = new JFrame("Test Frame");
private static Graph graph = null;
private static JScrollPane jsp = null;
public Grapher(){
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public void display(String fileName) {
if(jsp != null)
frame.getContentPane().remove(jsp);
graph = new Graph(fileName);
jsp = new JScrollPane(graph);
frame.getContentPane().add(jsp);
frame.setSize(graph.getPreferredSize());
frame.setVisible(true);
}
private class Graph extends Component{
BufferedImage img;
@Override
public void paint(Graphics g) {
g.drawImage(img, 0, 0, null);
}
public Graph(String fileName) {
setFocusable(false);
try {
img = ImageIO.read(new File(fileName));
} catch (IOException e) {System.err.println("Error reading " + fileName);e.printStackTrace();}
}
}
}
어쨌든, 내 문제는 내가 display
명령을 호출 할 때마다이 창 정말 agravating 수있는 일식을 포함한 모든 자바의 초점을 훔치는 것입니다. 심지어 생성자에 setFocusable(false)
을 추가하려고 시도했지만 여전히 포커스를 훔쳐 관리합니다. 초점을 맞추지 만 건설에 자동으로 초점을 맞추지 않는 방법은 무엇입니까?
두 가지 유용한 정보를 보내 주셔서 감사합니다. 1. setVisible (true)가 포커스를 훔치고, 2. JFrame이 더 좋습니다. –