首页 > 解决方案 > 为什么我的 JButton 没有出现在我的 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 没有问题,所以我不知道为什么这不起作用。这是我第一次使用 Graphics 类,所以这可能是问题的一部分。

标签: java

解决方案


因此,您的问题的“症状”是由 引起的panel.setLayout(null);,但问题的根源是对组件布局如何工作的误解。

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

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

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

短篇小说 - 不要使用null布局。长话短说,您可以考虑使用不同的方法,也许利用 aBorderLayout并将tttMain() 和JPanel带有按钮的按钮添加到其中,作为一个想法

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


推荐阅读