jpanel перекрывают другие компоненты - PullRequest
2 голосов
/ 14 октября 2011

У меня серьезная проблема при добавлении 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, все в порядке.Я использую компоненты форм Oracle в frmall.jar Вы можете загрузить frmall.jar из http://www.megafileupload.com/en/file/329640/frmall-jar.html Есть ли у вас какое-либо решение, чтобы красный прямоугольник перекрывался с другими компонентами?

Извините за мойterible English.

Заранее спасибо.


Теперь я пытаюсь заменить Jpanel на Forms DrawnPanel, но проблема все еще остается:

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 Ответ

3 голосов
/ 14 октября 2011

Первый совет, который я бы предложил, это не смешивать компоненты Swing и AWT. Попробуйте обновить jar-форму Oracle Oracle до версии Swing, или, если это не удалось, используйте только компоненты AWT в своем коде.

...