Java 为什么不是';我的JButton没有出现在JFrame上吗?
我不知道为什么我的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
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。