【问题标题】:I'm trying to add a JPanel to a JFrame with Flowlayout, but continue to get an exception. What did I do wrong?我正在尝试使用 Flowlayout 将 JPanel 添加到 JFrame,但继续出现异常。我做错了什么?
【发布时间】:2014-05-06 23:20:03
【问题描述】:

我正在尝试使用 FlowLayout 将 JPanel 添加到 JFrame,但继续收到此异常:“线程中的异常“AWT-EventQueue-0”java.lang.IllegalArgumentException:非法组件位置”。我希望能够在不久的将来实现一个带有几个按钮的 JPanel,所以请告诉我我能做些什么来实现它。

package textadv;


import java.awt.FlowLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Label;
import java.awt.event.KeyEvent;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TextAdv {

private JFrame frame = new JFrame("Text Adventure");
private JPanel mainPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
private JButton b1 = new JButton("Left");

public TextAdv() {

    mainPanel.setBackground(Color.RED);

    int FRAME_WIDTH = 400;
    int FRAME_HEIGHT = 400;

    b1.setEnabled(true);
    b1.setVisible(true);
    b1.setPreferredSize(new Dimension(40, 40));

    mainPanel.setVisible(true);
    mainPanel.setPreferredSize(new Dimension (50, 50));

    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
    frame.setVisible(true);

    mainPanel.add(b1, FlowLayout.CENTER);
    frame.add(mainPanel);

}

public static void main(String[] args) {

    java.awt.EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            TextAdv fS = new TextAdv();
        }
    });

}

【问题讨论】:

    标签: java swing exception jframe jpanel


    【解决方案1】:

    您不能为 Container 的 add 方法指定 FlowLayout 选项。这解决了 add() 接受 Component 和 int 索引的重载。其他布局允许您使用 add(Component, Object) 重载,例如 GridBagLayout 及其 GridBagConstraints。对于 FlowLayout,您只需为布局的构造函数指定选项。

    替换这个

    mainPanel.add(b1, FlowLayout.CENTER);
    

    有了这个

    mainPanel.add(b1);
    

    考虑重新访问这里的教程:http://docs.oracle.com/javase/tutorial/uiswing/layout/flow.html

    在此处查看容器:http://docs.oracle.com/javase/7/docs/api/java/awt/Container.html#add%28java.awt.Component,%20int%29

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多