2016-07-19 4 views
-1

나는 스윙의 데스크탑 응용 프로그램을 가지고 있습니다. 배경으로 이미지가있는 JPanel이 있고 그 안에 그림과 같이 두 개의 버튼과 JScrollPane이 있습니다. Frame with JPanel. JScrollPane이 끝나면 투명 이미지가있는 JLabel을 추가하고 몇 초 후에 사라지는 함수 (showLabel())가 있습니다. 문제는 JLabel을 추가 할 때입니다. 그림 Bad shows에서 보이는 JLabel 나쁜 쇼. 내 문제를 도와 줄 수있어?Java 잘못된보기 JPanel

public class MainWindow { 

private JFrame frame; 
private PanelPopis panelPopis = new PanelPopis(this); 
private MyPaint myPaint; 

public MainWindow { 

    setWindow(): 
    BufferedImage image1 = ImageIO.read(getClass().getClassLoader().getResource("poz.png")); 

    this.myPaint = new MyPaint(image1); 
    this.frame.add(myPaint); 

    this.myPaint.add(panelPopis.setPanel()); 

} 


private void setWindow() { 
    this.frame = new JFrame("DD"); 
    this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.frame.setSize(400, 680); 
    this.frame.setResizable(false); 
    this.frame.setLocationRelativeTo(null); 
} 

private void showLabel(){ 

    JLabel label = new JLabel(); 

    label.setIcon(new ImageIcon(new ImageIcon(getClass().getClassLoader().getResource("postEn.png")).getImage().getScaledInstance(395, 653, Image.SCALE_DEFAULT))); 
    label.setBackground(new Color(0, 0, 0, 10)); 
    label.setOpaque(true); 

    this.frame.invalidate(); 
    this.frame.add(label); 
    this.frame.revalidate(); 

    int delay2 = 3000; // milliseconds 
    ActionListener taskPerformer2 = new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      frame.remove(label); 
      frame.revalidate(); 
      frame.repaint(); 
     } 

    }; 
    Timer myTimer2 = new Timer(delay2, taskPerformer2); 
    myTimer2.setRepeats(false); 
    myTimer2.start(); 

} 

}

public class MyPaint extends JPanel { 

private static final long serialVersionUID = 1L; 
BufferedImage image; 

public MyPaint(BufferedImage image) { 
    setOpaque(false); 
} 


public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
     g.drawImage(image, 0, 0, 395, 653, this); 

} 

}

public class PanelPopis extends JPanel { 

private static final long serialVersionUID = 7676683627217636485L; 

private JButton setLanguage; 
private JButton cont; 
private JScrollPane scrolPanel; 
private JTextArea popis; 
private MainWindow mainWindow; 

public PanelPopis(MainWindow mainWindow) { 
    this.mainWindow = mainWindow; 

} 

public JPanel setPanel() { 

    JPanel panel = new JPanel(); 
    panel.setLayout(new BorderLayout()); 
    panel.setOpaque(false); 

    JPanel panel2 = new JPanel(); 
    Border border = panel2.getBorder(); 
    Border margin = new EmptyBorder(0, 0, 4, 0); 
    panel2.setBorder(new CompoundBorder(border, margin)); 

    panel2.setOpaque(false); 
    panel2.add(this.scrolPanel = new JScrollPane(popis)); 

    panel.add(this.setLanguage = new JButton("language settings"), BorderLayout.NORTH); 
    panel.add(this.cont = new JButton("CONTINUE"), BorderLayout.SOUTH); 
    panel.add(panel2, BorderLayout.CENTER); 

    return panel; 

} 

}

+2

1) 더 도움이 빨리 들어, [MCVE] 또는 게시 [짧은, 자기 것이 포함 된, 올바른 예 (http://www.sscce.org /). 2) 예를 들어 이미지를 얻는 한 가지 방법은 [이 Q & A] (http://stackoverflow.com/q/19209650/418556)에서 볼 수있는 이미지에 핫 링크하는 것입니다. –

+0

당신은 MyPaint에서 다른 것들을 가지고 있습니다 - 사진 위에있는 간단한 사진은 심각한 것이 아닙니다 - 전체 코드보기 – gpasch

+0

@gpasch * "전체 코드보기"* 동의하지 않습니다. MCVE는 *** 가장 좋은 *** 최적의 코드 형태입니다. 코멘트의'[mcve]'는 [mcve]로 자동 확장됩니다. Branislav Pažický - 크게 읽을 수없는 주석에 코드를 넣지 마십시오. 그것은 편집문으로 질문에 포함되어야합니다. –

답변

0

나는의 getResource() 대신에 같이 getResourceAsStream (의 방법을 사용) 모두의 경로를 가지고 제안 이미지를 이렇게 입력하십시오.

classLoader는 (두 OS의 차이로 인해 귀하의 경우) 다르게 작동 할 수 있으므로 이렇게하면 애플리케이션이 항상 올바른 리소스를 확보하게됩니다. 여기의 getResource에

더 :

https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String)

+0

getResource로 변경했지만 여전히 동일한 작업을 수행합니다. –

+0

죄송합니다. 변경했습니다. –