我想用Swing创建一个简单的桌面游戏.我有一个JFrame和一个JPanel变量.

我想将JButtons添加到这个JPanel,但我想创建一个自己的类.

我创建了一个扩展JButton(继承)的类:

public class GameField extends JButton {...}

所以我可以将GameField添加到JPanel.

但我想通过组合创建GameFields:

public class GameField{

private JButton button;

}

但在这篇文章中我如何将GameField添加到JPanel?

我可以通过compisition解决这个问题吗?

解决方法:

But in this clase how I can add GameField to JPanel? Can I solve this

problem by compisition?

你这样做是通过添加一个这样的简单getter:

public class GameField{

private JButton button;

public GameField(String text) {

button = new JButton(text);

// do your stuff here

}

public JButton getButton() {

return button;

}

}

然后在你的GUI中:

public void createAndShowGUI() {

JPanel panel = new JPanel(new GridLayout(5,5));

panel.add(new GameField("Button # 1").getButton());

panel.add(new GameField("Button # 2").getButton());

...

JFrame frame = new JFrame("Game");

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

frame.getContentPane().add(panel);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

编辑

你在评论中说过:

Thanks, but in this case if I’d like to access this field (i.e.

panel.getComponent(i)), I can get only a JButton, and not a GameField.

您可以使用GameField对象保留列表,也可以使用putClientProperty()方法保留对GameField对象的引用,如下例所示:

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.SwingUtilities;

public class Demo {

private void createAndShowGUI() {

ActionListener actionListener = new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

JButton button = (JButton)e.getSource();

GameField gameField = (GameField)button.getClientProperty("GameField");

if(gameField != null) {

System.out.println(gameField.getText());

}

}

};

GameField gameField1 = new GameField("Button # 1");

gameField1.getButton().addActionListener(actionListener);

GameField gameField2 = new GameField("Button # 2");

gameField2.getButton().addActionListener(actionListener);

JPanel content = new JPanel(new GridLayout());

content.add(gameField1.getButton());

content.add(gameField2.getButton());

JFrame frame = new JFrame("Demo");

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

frame.add(content);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

class GameField {

private String text;

private JButton button;

public GameField(String text) {

this.text = text;

button = new JButton(text);

button.putClientProperty("GameField", GameField.this);

}

public JButton getButton() {

return button;

}

public String getText() {

return text;

}

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

new Demo().createAndShowGUI();

}

});

}

}

标签:java,inheritance,swing

来源: https://codeday.me/bug/20190825/1716885.html

java button和jbutton_java – JButton中的组合与继承相关推荐

  1. java button 添加事件_java中如何给button添加事件

    一个例子, 参考下; 把第一个panelright.remove(firstpanel); package baidu; import java.awt.*; import java.awt.even ...

  2. java button 背景色_Swing JButton不会更改onclick的背景颜色 - java

    我希望单击该按钮时它永远不会更改背景颜色,默认情况下该颜色将更改为浅蓝色灰色. 这是我的代码 JButton b = new JButton(); b.setBackground(SystemColo ...

  3. 重新精读《Java 编程思想》系列之组合与继承

    Java 复用代码的两种方式组合与继承. 组合 组合只需将对象引用置于新类中即可. 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合. public class B {p ...

  4. java可以多重继承吗_Java中的多重继承与组合vs继承

    java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

  5. java 中组合与复用_Java 代码复用(组合与继承)

    java中的类都是围绕着类进行的.可以通过创建新类来复用代码,而不必从头编写.可以使用别人已经开发并调试好的类.此方法使用的窍门在于使用类而不破坏现有的程序代码.达到这一目的的方法有两种: 第一种方法 ...

  6. Java中的多重继承与组合vs继承

    有时我写了几篇有关Java 继承 , 接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后学习组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能力. 与其他一些流 ...

  7. java skip函数_【Java必修课】图说Stream中的skip()和limit()方法及组合使用

    1 简介 本文将讲解Java 8 Stream中的两个方法:skip()和limit().这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和 ...

  8. java组合与继承始示例_Java示例中的组合

    java组合与继承始示例 Composition in java is the design technique to implement has-a relationship in classes. ...

  9. java获取组合框值_在Java swing中获得组合框值

    我需要在Swing中获得组合框的整数值. 我为combobox设置了一个整数值作为id.我尝试了combobox.getSelectedItem()和combobox.getSelectedIndex ...

最新文章

  1. 撒列实现关键字过虑二(附源码)
  2. 地址空间和虚拟内存(转载)http://topic.csdn.net/u/20090619/10/4c62a13b-536b-4b0a-af09-2271c6a104e1.html...
  3. selenium python (七)层级定位(二次定位)
  4. Splay(单点修改+查询)
  5. 图解javascript中this指向
  6. hdu 4717 The Moving Points(三分+计算几何)
  7. 基于TensorFlow开发人脸识别
  8. oracle工作流错误,工作流错误处理 - Oracle® ZFS Storage Appliance 客户服务手册
  9. windows 10 80端口占用处理方法_已迁移
  10. openairinterface 中手动安装编译 UHD, Ubuntu 16.04
  11. 55岁自学python编程-热门专业三年一换?奥鹏教育解析编程还能火多久
  12. bzoj 2152: 聪聪可可(树的点分治)
  13. chrome扩展开发与上架
  14. NOI 1818:红与黑(C++)
  15. 计算机网络-自顶向下笔记-可靠数据传输原理(三种rdt)
  16. 流量/访客数/曝光量/浏览量/pv/uv
  17. Maya批渲染命令实例解析
  18. HarmonyOS荣耀8x,不忘老机型 荣耀9X系列被曝今年将升级HarmonyOS
  19. python kil 掉子进程
  20. Java 在Excel中创建多级分组、折叠或展开分组

热门文章

  1. nextjs 添加子目录
  2. 怎么把图片转文字?简单好用的转换方法分享
  3. 信息安全标准ISO27000
  4. 那天,妹子给我发来了一串乱码…
  5. Android中导航栏之自定义导航布局
  6. 动态背景下目标跟踪算法目标跟踪
  7. Java对象内存布局和对象头
  8. julia系列1:介绍与安装
  9. MySQL 大表性能优化
  10. (2)3DMAX之基础对象创建