java - 为什么我的 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 类,所以这可能是问题的一部分。
解决方案
因此,您的问题的“症状”是由 引起的panel.setLayout(null);
,但问题的根源是对组件布局如何工作的误解。
布局管理器做了很多重要的工作,你应该花时间去学习和理解它们。
JPanel
,默认情况下,使用FlowLayout
. tttMain
(顺便说一句,这违反了社区命名约定;))扩展自JPanel
,因为您从不更改布局管理器,所以它使用FlowLayout
.
然后向其中添加一个JPanel
,它的布局设置为null
. 这意味着它不再向其父级提供大小提示 - 因此它将以 的大小进行布局0x0
,这将导致我们遇到您的潜在问题。
短篇小说 - 不要使用null
布局。长话短说,您可以考虑使用不同的方法,也许利用 aBorderLayout
并将tttMain
() 和JPanel
带有按钮的按钮添加到其中,作为一个想法
我强烈建议您花一些时间了解并了解在容器中布局组件
推荐阅读
- c# - 无法使用剃刀在表格中填充图像
- javascript - 如何使用 d3 插件设置 rollup.js?
- node.js - 从 https 网站发送 http 请求
- reactjs - 在从 Material-UI 中选择组件(React)中更改焦点状态的边框颜色
- go - 如何将参数返回给 Go 中的另一个函数?
- javascript - 如何获取 android google chrome 的所有打开页面?
- python - 如何使用 pandas 向量化查找
- compilation - 共享对象文件如何与其他共享对象或常规对象链接以生成新的对象文件?
- python - 如何加快或完善 Google cloud-ndb 库中的上下文管理?
- xcode - SwiftUI 按钮的可触摸区域