首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jpanel重叠其他组件

jpanel重叠其他组件
EN

Stack Overflow用户
提问于 2011-10-14 07:42:15
回答 1查看 1.5K关注 0票数 2

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

代码语言:javascript
运行
复制
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,然后添加setComponentZorder,这是因为我的需求和实际应用程序中不能在所有组件的末尾添加JPanel,所以我按照这样做了。

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

这是一幅图像:

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

对不起,我的英语。

提前谢谢。

现在,我尝试用表单DrawnPanel替换Jpanel,但它仍然存在问题:

代码语言:javascript
运行
复制
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);

所以现在,我的每个组件都是表单组件,但我仍然遇到了这个问题。

EN

回答 1

Stack Overflow用户

发布于 2011-10-14 08:36:34

我提供的第一个建议是,不要将Swing和AWT组件混合在一起,尝试将'Oracle‘jar更新为Swing版本,否则在代码中只使用AWT组件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7764532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档