Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不是';我的JButton没有出现在JFrame上吗?_Java - Fatal编程技术网

Java 为什么不是';我的JButton没有出现在JFrame上吗?

Java 为什么不是';我的JButton没有出现在JFrame上吗?,java,Java,我不知道为什么我的JButton没有出现在我的JFrame上。代码如下: import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JPanel; import j

我不知道为什么我的JButton没有出现在我的JFrame上。代码如下:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;

public class tttMain extends JPanel implements ActionListener {

    private static final long serialVersionUID = 2294426281847625986L;

    private static JFrame frame;
    private static JPanel panel;
    private static JButton b1, b2, b3, b4, b5, b6, b7, b8, b9;
    private static ArrayList<JButton> buttonList;

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.black);
        //vertical lines
        g.drawLine(150, 65, 150, 340);
        g.drawLine(260, 65, 260, 340);
        //horizontal lines
        g.drawLine(65, 150, 340, 150);
        g.drawLine(65, 260, 340, 260);
    }

    public static void main(String[] args) {

        frame = new JFrame();
        panel = new JPanel();
        frame.setSize(450, 450);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setContentPane(new tttMain());
        frame.add(panel);

        panel.setLayout(null);

        b1 = new JButton("Hi Stack Overflow!");

        b1.setBounds(85, 85, 65, 65);

        panel.add(b1);


        frame.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {

    }
}
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JButton;
公共类tttMain扩展JPanel实现ActionListener{
私有静态最终长serialVersionUID=2294426281847625986L;
私有静态JFrame;
专用静态JPanel面板;
专用静态按钮b1、b2、b3、b4、b5、b6、b7、b8、b9;
私有静态ArrayList按钮列表;
@凌驾
公共组件(图形g){
超级组件(g);
g、 设置颜色(颜色为黑色);
//垂直线
g、 抽绳(150、65、150、340);
g、 抽绳(260、65、260、340);
//水平线
g、 抽绳(65150340150);
g、 抽绳(6526040260);
}
公共静态void main(字符串[]args){
frame=新的JFrame();
panel=新的JPanel();
框架。设置尺寸(450450);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setresizeable(false);
setContentPane(新的tttMain());
框架。添加(面板);
panel.setLayout(空);
b1=新的JButton(“Hi Stack Overflow!”);
b1.立根(85,85,65,65);
面板。添加(b1);
frame.setVisible(true);
}
已执行的公共无效操作(操作事件e){
}
}

有人能帮我吗?我以前使用过JButtons,没有问题,所以我不知道为什么它不起作用。这是我第一次使用Graphics类,所以这可能是问题的一部分。

之所以发生这种情况,是因为您已将面板的布局设置为
null
。删除以下行,它将出现:

panel.setLayout(null);
所以问题的“症状”是由
panel.setLayout(null)引起的,但问题的根源是对组件布局工作原理的错误理解

布局经理做了很多重要的工作,你应该花时间去学习和理解他们

默认情况下,
JPanel
使用
FlowLayout
tttMain
(顺便说一句,它违反了社区命名约定;)从
JPanel
扩展而来,因为您从未更改布局管理器,所以它使用的是
FlowLayout

然后添加一个
JPanel
,它的布局设置为
null
。这意味着它不再向其父级提供大小调整提示-因此它将以
0x0
的大小进行布局,这将导致您的潜在问题


短篇故事-不要使用
null
布局。长话短说,你可以考虑使用一种不同的方法,也许利用一个<代码>边界布局< /C> >同时添加<代码> TtTime< /Calp>(

我认为使用NULL布局是没有问题的)但是我总是指定MimimuSimple和MaimuMeSimple。 使用绝对布局也不能很好地重新调整大小,并且可能会导致一些问题。


我还在eclipse中使用WindowBuilder,因为您可能不应该手工操作。

谢谢。我对“真实世界”编程没有太多经验,因为我在学校刚开始学习计算机科学课程中的java。