繁体   English   中英

为什么我的 JButton 没有出现在我的 JFrame 上?

[英]Why isn't my JButton appearing on my JFrame?

我不确定为什么我的 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) {

    }
}

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

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

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

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

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

简短的故事 - 不要使用null布局。 长话短说,您可以考虑使用不同的方法,也许利用BorderLayout并添加tttMain () 和带有按钮的JPanel ,作为一个想法

我强烈建议您花一些时间了解并了解在容器中布局组件

这是因为您已将面板的布局设置为null 删除以下行,它将出现:

panel.setLayout(null);

我认为使用 null 布局没有问题,但是我总是指定 minimumSize 和 maximumSize。 使用绝对布局也不能很好地调整大小。 并且可能会导致一些问题。 我还在 eclipse 中使用 WindowBuilder,因为您可能不应该手动操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM