jpanel与其他组件重叠

时间:2011-10-14 07:42:16

标签: java swing awt oracleforms

JPanel添加到Oracle Forms Container(基于AWT Container)时,我遇到了严重问题。 我先添加JPanel,然后添加一些VTextFields(Oracle Forms文本字段)。

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,之后我setComponentZorde r,这是因为我的要求和我的实际应用程序中我无法在最后添加JPanel组件,所以我按照这种方式做到了。

但是目前我有一个问题,所有其他组件都与JPanel重叠,但JPanel(红色矩形)的背景总是隐藏其他组件。

这是图片:

Overlap GUI

我不知道,但是当我使用JTextField时,一切都还可以。 我在frmall.jar中使用Oracle Forms的组件 您可以从http://www.megafileupload.com/en/file/329640/frmall-jar.html下载frmall.jar 你有什么解决办法让红色矩形与其他组件重叠吗?

抱歉我的英文。

先谢谢。


现在我尝试用Forms 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);

现在,我的每个组件都是Forms Component,但我仍然遇到这个问题

1 个答案:

答案 0 :(得分:3)

我提供的第一个建议是不要混合Swing& AWT组件。尝试将'Oracle forms'jar更新为Swing版本,如果没有,请在代码中仅使用AWT组件。