2011-10-14 2 views
2

JPanel을 Oracle Forms Container (기반 AWT Container)에 추가 할 때 심각한 문제가 있습니다. JPanel을 먼저 추가 한 후 VTextFields (Oracle Forms 텍스트 필드)을 추가합니다. 보시다시피jpanel 다른 구성 요소와 겹침

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

import oracle.ewt.scrolling.scrollBox.ScrollBox; 
import oracle.forms.ui.DrawnPanel; 
import oracle.forms.ui.FScrollBox; 
import oracle.forms.ui.VTextField; 

public class OverlapTest { 

int w = 800; 
int h= 700; 

public OverlapTest() { 
    JFrame f = new JFrame(); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setSize(w, h); 

    DrawnPanel main = new DrawnPanel(); 

    main.setLayout(null); 
    main.setBounds(0, 0, w, h); 
    main.setVisible(true); 

    VTextField t1 = new VTextField(); 
    t1.setBounds(100, 100, 130, 22); 

    VTextField t2 = new VTextField(); 
    t2.setBounds(100, 150, 130, 22); 

    VTextField t3 = new VTextField(); 
    t3.setBounds(100, 200, 130, 22); 

    final JPanel draw = new JPanel(){ 
     @Override 
     public void paint(Graphics g) { 
      super.paint(g); 
      Graphics2D g2 = (Graphics2D) g; 
      g2.setColor(Color.red); 
      g2.fillRect(0, 100, 130, 200); 
      g2.dispose(); 

     } 

     @Override 
     public void update(Graphics g) { 
      paint(g); 
     } 

    }; 
    draw.setOpaque(false); 
    draw.setBounds(0, 0, w, h); 

    main.add(draw); 
    main.add(t1); 
    main.add(t2); 
    main.add(t3); 

    ScrollBox sBox = new ScrollBox(main); 
    sBox.setBounds(0, 0, w, h); 
    sBox.setVScrollInsets(1, 100); 
    oracle.forms.ui.FScrollBox fBox = new FScrollBox(sBox, 0, 0); 
    fBox.setVisible(true); 
    fBox.setBounds(0, 0, w - 50, h - 50); 

    main.setComponentZOrder(draw, 3); 
    main.setComponentZOrder(t1, 0); 
    main.setComponentZOrder(t2, 1); 
    main.setComponentZOrder(t3, 2); 

    f.add(fBox); 

    f.setVisible(true); 
} 

public static void main(String[] args) { 
    OverlapTest test = new OverlapTest(); 
    } 
} 

, 내 요구 사항은 내 실제 응용 프로그램에서 나는 모든 구성 요소의 끝에서 JPanel를 추가 할 수 없기 때문에, 즉 I setComponentZorde R 후, 그 첫 번째 JPanel 추가, 그래서 나는이 것을 따랐 는가 방법.

그러나 현재 하나의 문제가 있습니다. 다른 모든 구성 요소는 JPanel과 겹칩니다. 그러나 JPanel (빨간색 사각형)의 배경은 항상 다른 구성 요소를 숨 깁니다.

은 이미지입니다 :

Overlap GUI

나도 몰라,하지만 난 JTextField를 사용할 때, 모든 것이 OK입니다. frmall.jar 에서 Oracle Forms의 구성 요소를 사용하고 있습니다. http://www.megafileupload.com/en/file/329640/frmall-jar.html 에서 frmall.jar을 다운로드 할 수 있습니다. 빨간색 사각형을 다른 구성 요소와 겹치게 만들 수있는 해결책이 있습니까?

제 영어는 유감 스럽습니다.

미리 감사드립니다.


는 지금은 양식 DrawnPanel에 의해 JPanel을 대체하려고 노력하지만, 여전히 문제가 있습니다

FormCanvas form = new FormCanvas(){ 
     @Override 
     public void paint(Graphics g, Dimension paramDimension, 
       Rectangle paramRectangle) { 
      // TODO Auto-generated method stub 
      super.paint(g, paramDimension, paramRectangle); 
      Graphics2D g2 = (Graphics2D) g; 
      g2.setColor(Color.red); 
      g2.fillRect(0, 100, 200, 200); 
      g2.dispose(); 
     } 
    }; 
DrawnPanel draw = new DrawnPanel(); 
draw.setPainter(form); 
draw.setVisible(true); 

는 이제 모든 내 구성 요소가 양식이 구성 요소입니다,하지만 난 여전히이 문제를 얻을

+1

와우, 8Kb PNG로 줄이는 500KB + 비트 맵! 사람들이 비트 맵 형식을 사용하지 않는 것은 당연합니다. 스레드에 직접 작은 PNG를 편집했습니다. 멋진 스크린 샷을 만드는 방법에 대한 팁은 [게시물을 설명하기 위해 스크린 샷을 만드는 방법은 무엇입니까?] (http://meta.stackexchange.com/questions/99734/how-do-i-create-a-screenshot-to)를 참조하십시오. -illustrate-a-post) –

+2

또한 성인 중심 광고를 포함하지 않는 덜 유치한 호스팅 사이트를 고려하십시오. – trashgod

답변

3

첫 번째 조언은 입니다. 스윙 & AWT 구성 요소를 혼합하지 마십시오. 'Oracle 양식'jar를 Swing 버전으로 업데이트하거나 코드에서 AWT 구성 요소 만 사용하십시오.

+0

안녕하세요, Jappel은 가벼운 구성 요소이고 AWT는 헤비급이므로 내 Jpanel이 항상 다른 구성 요소와 겹치기 때문에이 사건이 문제를 일으킨다는 것을 알고 있습니다. 검색해 보았고 이미 com.sun.awt.AWTUtilities.setComponentMixingCutoutShape를 사용했지만 아직 해결할 수 없습니다. http://today.java.net/article/2009/11/02/transparent-panel-mixing-heavyweight-and-lightweight-components. 제발 나를 해결하는 데 도움이, 나를 미쳤어 – Hoangdise

+0

어떻게 내 충고를 시도 알 수 있습니까? 조언을 무시하면 어떻게 도와 드릴까요? –