【问题标题】:jpanel overlap other componentsjpanel 与其他组件重叠
【发布时间】:2011-10-17 19:20:12
【问题描述】:

当我将 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,然后我添加setComponentZorder,这是因为我的要求以及在我的实际应用程序中我无法在所有组件的末尾添加JPanel,所以我做到了按照这种方式。

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

这是图片:

我不知道,但是当我使用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);

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

【问题讨论】:

  • 哇,一个 500Kb+ 的位图缩小到 8Kb PNG!难怪人们不使用位图格式。我已将小 PNG 直接编辑到线程中。有关创建出色屏幕截图的提示,请参阅How do I create a screenshot to illustrate a post?
  • 另外,考虑使用不那么花哨的托管网站,或许不包含面向成人的广告。

标签: java swing awt oracleforms


【解决方案1】:

我要提供的第一个建议是不要混合使用 Swing 和 AWT 组件。 尝试将“Oracle 表单”jar 更新为 Swing 版本,否则,请在代码中仅使用 AWT 组件.

【讨论】:

  • 嗨,我知道造成问题的原因,因为 Jpanel 是轻量级组件,而 AWT 是重量级,所以我的 Jpanel 总是与其他组件重叠。我搜索了,我已经使用了 com.sun.awt.AWTUtilities.setComponentMixingCutoutShape 但仍然无法解决。 today.java.net/article/2009/11/02/… 。请帮我解决它,它让我发疯了
  • 我怎么知道你尝试了我的建议?如果您无视我的建议,我该如何帮助您?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
相关资源
最近更新 更多