将两个不同位置的JPanels添加到JApplet中

3

我正在尝试在JApplet上的不同位置添加两个JPanel对象。 但是这段代码会抛出异常:

java.lang.IllegalArgumentException: illegal component position

有人可以纠正这段代码吗?

import java.awt.FlowLayout;
import javax.swing.*;

public class TwoPanel extends JApplet {

    JPanel p1,p2;
    JLabel l1,l2;

    @Override
    public void init()
    {
        p1=new JPanel();
        p2=new JPanel();
        p1.setLayout(new FlowLayout());
        p2.setLayout(new FlowLayout());
        l1=new JLabel("Panel 1");
        l2=new JLabel("panel 2");
        p1.add(l1,0,0);
        p2.add(l2,100,100);
        add(p1);
        add(p2);
        p1.setFocusable(true);
        p2.setFocusable(true);
    }
}

Exception

java.lang.IllegalArgumentException: illegal component position
    at java.awt.Container.addImpl(Container.java:1080)
    at java.awt.Container.add(Container.java:998)
    at TwoPanel.init(TwoPanel.java:25)
    at sun.applet.AppletPanel.run(AppletPanel.java:435)
    at java.lang.Thread.run(Thread.java:744)

http://docs.oracle.com/javase/8/docs/api/java/awt/Container.html#add-java.awt.Component-java.lang.Object-int- - Paul Samsotha
@peeskillet 这是我的问题! - Merp
是的,我看到了。看看AndrewThompson的答案,里面有一些有用的技巧。 - Paul Samsotha
1个回答

2
p1.add(l1,0,0);

这不是在面板中定位元素的正确方法。应该使用边框来创建空白间隔。

enter image description here

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

/* <applet code=TwoPanel width=400 height=300></applet> */
public class TwoPanel extends JApplet {

    JPanel p1,p2;
    JLabel l1,l2;

    @Override
    public void init()
    {
        // JApplet defaults to BorderLayout
        System.out.println(getLayout());
        p1=new JPanel();
        p2=new JPanel();
        p1.setLayout(new FlowLayout());
        p2.setLayout(new FlowLayout());
        l1=new JLabel("Panel 1");
        l2=new JLabel("panel 2");
        p1.add(l1);
        p1.setBackground(Color.RED);
        p2.add(l2);
        p2.setBackground(Color.GREEN);
        p2.setBorder(new EmptyBorder(100,100,100,100));
        // a panel added to a BorderLayout with no constraint ends in the CENTER
        add(p1, BorderLayout.PAGE_START);
        // but the CENTER only shows ONE component.
        add(p2);
        p1.setFocusable(true);
        p2.setFocusable(true);
    }
}

更为普遍的情况

Java GUI 可能需要在多个平台上工作,使用不同的屏幕分辨率,并使用不同的 PLAFs。因此,它们不利于组件的精确定位。为了为健壮的 GUI 组织组件,可以使用布局管理器或它们的组合(如图 1 和图 2)*,以及布局填充和留白*。

*注:原文中的超链接已保留。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接