java button和jbutton_java – JButton中的组合与继承
我想用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中的组合与继承相关推荐
- java button 添加事件_java中如何给button添加事件
一个例子, 参考下; 把第一个panelright.remove(firstpanel); package baidu; import java.awt.*; import java.awt.even ...
- java button 背景色_Swing JButton不会更改onclick的背景颜色 - java
我希望单击该按钮时它永远不会更改背景颜色,默认情况下该颜色将更改为浅蓝色灰色. 这是我的代码 JButton b = new JButton(); b.setBackground(SystemColo ...
- 重新精读《Java 编程思想》系列之组合与继承
Java 复用代码的两种方式组合与继承. 组合 组合只需将对象引用置于新类中即可. 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合. public class B {p ...
- java可以多重继承吗_Java中的多重继承与组合vs继承
java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...
- java 中组合与复用_Java 代码复用(组合与继承)
java中的类都是围绕着类进行的.可以通过创建新类来复用代码,而不必从头编写.可以使用别人已经开发并调试好的类.此方法使用的窍门在于使用类而不破坏现有的程序代码.达到这一目的的方法有两种: 第一种方法 ...
- Java中的多重继承与组合vs继承
有时我写了几篇有关Java 继承 , 接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后学习组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能力. 与其他一些流 ...
- java skip函数_【Java必修课】图说Stream中的skip()和limit()方法及组合使用
1 简介 本文将讲解Java 8 Stream中的两个方法:skip()和limit().这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和 ...
- java组合与继承始示例_Java示例中的组合
java组合与继承始示例 Composition in java is the design technique to implement has-a relationship in classes. ...
- java获取组合框值_在Java swing中获得组合框值
我需要在Swing中获得组合框的整数值. 我为combobox设置了一个整数值作为id.我尝试了combobox.getSelectedItem()和combobox.getSelectedIndex ...
最新文章
- 撒列实现关键字过虑二(附源码)
- 地址空间和虚拟内存(转载)http://topic.csdn.net/u/20090619/10/4c62a13b-536b-4b0a-af09-2271c6a104e1.html...
- selenium python (七)层级定位(二次定位)
- Splay(单点修改+查询)
- 图解javascript中this指向
- hdu 4717 The Moving Points(三分+计算几何)
- 基于TensorFlow开发人脸识别
- oracle工作流错误,工作流错误处理 - 
Oracle® ZFS Storage Appliance 客户服务手册
- windows 10 80端口占用处理方法_已迁移
- openairinterface 中手动安装编译 UHD, Ubuntu 16.04
- 55岁自学python编程-热门专业三年一换?奥鹏教育解析编程还能火多久
- bzoj 2152: 聪聪可可(树的点分治)
- chrome扩展开发与上架
- NOI 1818:红与黑(C++)
- 计算机网络-自顶向下笔记-可靠数据传输原理(三种rdt)
- 流量/访客数/曝光量/浏览量/pv/uv
- Maya批渲染命令实例解析
- HarmonyOS荣耀8x,不忘老机型 荣耀9X系列被曝今年将升级HarmonyOS
- python kil 掉子进程
- Java 在Excel中创建多级分组、折叠或展开分组