當我將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
第一,我setComponentZorde
R後,那是因爲我的要求,我在實際應用中,我不能在所有組件的末尾添加JPanel
,所以我做到了遵循辦法。
但目前我有一個問題,所有其他組件重疊JPanel
但JPanel
(紅色矩形)的背景總是隱藏其他組件。
這是圖像:
我不知道,但是當我使用JTextField
,一切都OK了。 我使用的是Oracle Forms的組件frmall.jar
您可以從http://www.megafileupload.com/en/file/329640/frmall-jar.html下載frmall.jar
您是否有解決方案使紅色矩形與其他組件重疊?
對不起,我的terible英語。
在此先感謝。
現在我試圖通過形式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直接編輯到線程中。有關創建精美屏幕截圖的提示,請參見[如何創建屏幕截圖來演示文章?](http://meta.stackexchange.com/questions/99734/how-do-i-create-a-screenshot-to -illustrate-a-post) –