以下代码出错:java.lang.IllegalArgumentException: adding container's parent to itself.
这是代码:
public class humev extends JFrame implements ActionListener{
//Dichiarazione variabili e costanti
private static final int larghezza = 1300;
private static final int altezza = 1000;
private static final String nome = "Human Evolution";
private JLabel lab;
private JButton gioca;
private JPanel pang;
public humev(){
try{
pang = new JPanel();
gioca = new JButton("Gioca!");
gioca.addActionListener(this);
lab = new JLabel();
gioca.add(gioca);
lab.add(lab);
pang.setLayout(null);
}
catch(Exception e1){
System.err.println(e1);
System.err.println("Impossibile caricare il frame di gioco!");
}
}
public static void main(String[] args) {
//Finestra
try{
humev h = new humev();
JFrame finestra = new JFrame(nome);
Dimension dim_finestra = new Dimension(larghezza, altezza);
finestra.setPreferredSize(dim_finestra);
finestra.setMaximumSize(dim_finestra);
finestra.setResizable(false);
finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
finestra.pack();
finestra.setVisible(true);
}
catch(Exception e2){
System.err.println(e2);
System.err.println("Impossibile caricare la finestra. Frame non caricato");
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == gioca){
lab.setText("Gioco avviato con successo!");
}
}
}
答案 0 :(得分:2)
您无法将label
添加到label
: -
lab.add(lab);
Aldo您无法在button
上添加button
: -
gioca.add(gioca);
尝试将其添加到JPanel
或ContentPane
,而不是像
: -
pang.add(gioca);
pang.add(lab);
getContentPane().add(pang);
修改: - 强>
要显示您需要执行的JFrame
,请先将JPanel
添加到JFrame
,然后将JFrame
的可见性设置为true
,例如: - < / p>
finestra.add(pang); // add panel to frame
finestra.setVisible(true); // show frame visibility to true
也不要将布局设置为null
: -
pang.setLayout(null);
否则你需要自己设定界限。所以只需评论这一行。
答案 1 :(得分:1)
尝试运行此示例。您的代码中存在大量问题。
您正在为自己添加组件
gioca.add(gioca); // don't do this
使用布局。不要使用null
pang.setLayout(null); // don't do this .use layouts .and even if you use null then
//use bounds to absolutely position .if you use null layout and if you add using `.add()`
//then you will not see those components .
完整代码
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class humev extends JFrame implements ActionListener {
private static final int larghezza = 1300;
private static final int altezza = 1000;
private static final String nome = "Human Evolution";
private final JLabel lab;
private final JButton gioca;
private final JPanel pang;
public humev() {
super(nome);
pang = new JPanel();
//pang.setLayout(new FlowLayout()); // use appropriate layout .for example flowlayout.since flowlayout is default layout for jpanel you can avoid it.but don't use null
gioca = new JButton("Gioca!");
gioca.addActionListener(this);
lab = new JLabel("lable");
pang.add(gioca);
pang.add(lab);
add(pang); // add pang panel to frame
Dimension dim_finestra = new Dimension(larghezza, altezza);
setPreferredSize(dim_finestra);
setMaximumSize(dim_finestra);
//setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
pack();
}
public static void main(String[] args) {
humev humev = new humev();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == gioca) {
lab.setText("Gioco avviato con successo!");
}
}
}
答案 2 :(得分:1)
IllegalArgumentException 是未经检查的例外。
它由API Developer或Programmer明确提出,表明方法已使用非法参数调用。
示例:
Thread t = new Thread();
t.setPriority(15);
输出:
RuntimeException: IllegalArgumentExcepion
Thread优先级的有效范围是1到10,如果我们尝试使用任何其他值设置优先级,那么我们将得到IllegalArgumentException。