gpt4 book ai didi

java - 如何将 JButton 添加到其他类的 JPanel 中?

转载 作者:行者123 更新时间:2023-12-01 12:08:24 24 4
gpt4 key购买 nike

所以我有两个类。一种创建 JPanel 和 JFrame,另一种创建按钮。现在我想将这些按钮添加到我的 JPanel 中。

创建 JPanel 和 JFrame 的位置:

public class Surface extends JPanel implements KeyListener, ActionListener
{
private static final long serialVersionUID = 1L;

static JFrame jframe = new JFrame("TitleComingSoon");
Snake mySnake = new Snake(true);

int width;
int height;
@SuppressWarnings("deprecation")
public Surface(int width, int height)
{
this.width = width;
this.height = height;

// Create the JPanel
setLayout(null);
setBounds(0, 0, 400, 400);
setBackground(Color.DARK_GRAY);

// Create the JFrame
jframe.setSize(width, height);
jframe.setResizable(false);
jframe.setLayout(null);
jframe.add(this); // Add the JPanel to the JFrame
jframe.setVisible(true);

// Add the KeyListener
addKeyListener(this);
setFocusTraversalKeysEnabled(true);
setFocusable(true);
requestFocusInWindow();

show();
}

@Override
public void paintComponent(Graphics diamond)
{
super.paintComponent(diamond);
diamond.drawRect(60, 60, 100, 50);
diamond.setColor(Color.RED);
repaint();
}
}

在我的另一个类上,我正在这样做:

Surface.jframe.add(myButton);

我的问题是,按钮位于 JPanel 下方。因此,如果我删除 JPanel,我就可以看到该按钮。

最佳答案

有几件事跳出来......

  1. 使用null布局。虽然看似您获得了控制权,但实际上却增加了工作量并失去了平台之间的灵 active 。
  2. 使用另一个组件创建框架,但更重要的是,从其构造函数内部创建框架。面板不应该关心它如何显示,而应该专注于完成它设计的工作。
  3. 使用KeyListenerKeyListener 繁琐又麻烦,最好使用 Key Bindings API
  4. 使用static进行跨对象通信。静态并不是提供跨类访问字段的方式,还有许多其他技术可以提供更好的支持。主要问题是,如果您创建 Pane 的另一个实例,您将创建一个新框架并更改对 static 字段的引用...现在您实际上正在寻址哪个框架?

那么,解决方案是什么?

  • 从“主”入口类中,创建一个 JFrame 实例、您的 Surface 面板和按钮。将 Surface 面板设置为框架的内容面板,然后将按钮添加到框架中。
  • 使用适当的布局管理器
  • 使用按键绑定(bind) API 代替 KeyListener

关于java - 如何将 JButton 添加到其他类的 JPanel 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27409096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com