좋은 하루,JLayeredPane 그림이 아닙니다
희망적인 것은 신속한 질문입니다. JPanels 및 JLayeredPane을 JFrame 내부에서 사용하는 응용 프로그램을 작성 중입니다. 응용 프로그램을 처음 시작할 때 패널이 있어야하는 영역 위로 마우스를 움직일 때까지 패널 중 하나가 표시되지 않습니다. 나는 validate 및 repaint 메소드를 호출하기도하지만 두 패널을 함께 표시 할 수 있습니다. 어떤 제안? 고맙습니다. 여기
은 (주 메소드가) 내 JFrame의 클래스 다음
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class Application extends JFrame
{
public Application()
{
this.setSize(500,500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
JLayeredPane lp = new JLayeredPane();
lp.setBounds(0,0,500,500);
this.setLayeredPane(lp);
Mypanel p1 = new Mypanel();
Mypanel2 p2 = new Mypanel2();
this.getLayeredPane().add(p1,0);
this.getLayeredPane().add(p2,1);
this.validate();
this.repaint();
this.validate();
}
public static void main(String[] args)
{
Application app = new Application();
}
}
내 패널 클래스 마지막으로
import javax.swing.JButton;
import javax.swing.JPanel;
public class Mypanel extends JPanel
{
public JButton button;
public Mypanel()
{
this.setLayout(null);
this.setBounds(0, 0, 500, 500);
JButton b = new JButton("Hello");
b.setBounds(20,20,300,300);
this.add(b);
}
}
그리고 내 마지막 패널 클래스 중 하나입니다
import javax.swing.JButton;
import javax.swing.JPanel;
public class Mypanel2 extends JPanel
{
public JButton button;
public Mypanel2()
{
this.setLayout(null);
this.setBounds(0, 0, 500, 500);
JButton b = new JButton("SUP");
b.setBounds(20,10,200,200);
this.add(b);
this.repaint();
this.validate();
this.repaint();
}
}
안녕하세요! 큰 반응에 감사드립니다. 그래서 여기에 내가 정말로하려고하는 것이 있습니다 ... 저는 2D 게임이 될 백그라운드에서 버퍼링 된 이미지를 가지고 있습니다. 내 자신의 버튼과 텍스트 필드 클래스를 작성하고 싶지 않아서 내 이미지가 포함 된 레이어의 레이어를 ontop 할 예정이었습니다. 당신은 그 일을하는 방법에 대해 더 잘 알고 있습니까? – Matthew
그 경우에는'JLayeredPane' 대신'GlassPane'을 사용해야 할 수도 있습니다! http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html –
필요한 것을 수행 할 수있는 방법은 많습니다. 우선 내 자신의'JPanel' 서브 클래스를 만들고, 불투명 속성을 true로 설정 한 다음,'paintComponent'를 오버라이드하여 버퍼 이미지를 그립니다. 이미지를 그리기 위해 JLabel 또는 JButton을 가질 필요가 없습니다. add()/remove() 메소드를 통해 JTextField 또는 JButton과 같은 다른 스윙 컴포넌트를 추가/제거 할 수 있습니다. 단순한! BTW 그것은 모든 마우스 처리/그림을 단일 구성 요소에 캡슐화하는 데 도움이됩니다.내 경험에 MVC 원칙을 준수 항상 갚을. 데스크톱/게임 개발 분야의 전문가. –