Java 如何更改动态生成的JButton的图标
我有一个javaswing程序,我想知道如何创建一个按钮,点击它就会清除文本区域&改变这个人的图标,让他们放下手 按钮是使用for循环动态生成的 还有这个Java 如何更改动态生成的JButton的图标,java,swing,Java,Swing,我有一个javaswing程序,我想知道如何创建一个按钮,点击它就会清除文本区域&改变这个人的图标,让他们放下手 按钮是使用for循环动态生成的 还有这个 //创建按钮的步骤 for(int i=0;i { 字符串s=pa.toString()+questionPane.getText(); 最终ImageIcon raise=resizeIcon(新ImageIcon(“src/raise.png”),30,30; b、 设置图标(上升); showMessageDialog(null,s,“
//创建按钮的步骤
for(int i=0;i
{
字符串s=pa.toString()+questionPane.getText();
最终ImageIcon raise=resizeIcon(新ImageIcon(“src/raise.png”),30,30;
b、 设置图标(上升);
showMessageDialog(null,s,“欢迎来到聊天室”,JOptionPane.INFORMATION_MESSAGE,pa.getImage());
});
p、 添加(b);
}
//清除按钮逻辑
clearButton.addActionListener(e->{
问题窗格。设置文本(“”);
hostPane.setText(“”);
});
好的,这会很有趣
下面的示例将大部分概念解耦,并使用基本的“观察者模式”通知相关方状态已更改(即聊天已被清除)
这是一个基本概念,通过此概念,您可以将“什么”与“如何”分离开来,即“您想要做什么”(更新模型)与“如何做”(即按下按钮)分离开来。这使得它更容易适应更复杂的系统
该示例包含一个ChatService
,它有一个侦听器,在本例中,它简单地告诉相关方聊天已被清除
更复杂的解决方案可能是ChatService
在用户“举手”时生成事件,这允许相关方以任何与他们相关的方式处理事件
该示例使用操作
API将每个操作执行的工作与UI本身分离。这有助于创建单个工作单元,在拥有动态数据集时更易于处理
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Random;
导入javax.swing.AbstractAction;
导入javax.swing.Action;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
公开课考试{
公共静态void main(字符串[]args){
新测试();
}
公开考试(){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
JFrame=新JFrame();
frame.add(newtestpane());
frame.pack();
frame.setVisible(true);
}
});
}
公共类TestPane扩展了JPanel{
公共测试窗格(){
ChatService ChatService=新建ChatService();
JPanel面板=新的JPanel();
字符串[]名称=新字符串[]{“Bryan”、“Alan”、“George”、“Henry”};
列表操作=新的ArrayList(names.length);
for(字符串名称:名称){
PeopleAction=新PeopleAction(聊天服务,名称,false);
动作。添加(动作);
}
随机rnd=新随机();
actions.get(rnd.nextInt(names.length)).setrised(true);
for(操作:操作){
JButton btn=新JButton(动作);
面板。添加(btn);
}
setLayout(新的GridLayout(2,1));
添加(面板);
JPanel hostPane=新的JPanel();
jbuttonclearbutton=newjbutton(newclearaction(chatService));
添加(clearButton);
添加(主机窗格);
}
}
公共类聊天室服务{
私有列表侦听器=新的ArrayList(25);
public void addchatListener(ChatListener侦听器){
添加(侦听器);
}
public void removeChatListener(ChatListener侦听器){
删除(侦听器);
}
受保护的无效fireChatCleared(){
if(listeners.isEmpty()){
返回;
}
for(聊天侦听器:侦听器){
listener.chatCleared();
}
}
公共空间清除(){
//按要求去做
firechatclear();
}
}
公共接口聊天侦听器{
公共空间已清除();
}
公共类PeopleAction扩展了AbstractAction实现了ChatListener{
私有字符串名称;
私有布尔函数;
PublicPeopleAction(ChatService ChatService,字符串名称,布尔值){
//您可以使用大图标键或小图标来设置图标
this.name=名称;
如果(提出){
putValue(名称,“*”+名称);
}否则{
putValue(名称、名称);
}
addChatListeners(这个);
}
public void setRaised(布尔提升){
如果(提出){
putValue(名称,“*”+名称);
}否则{
putValue(名称、名称);
}
}
公共布尔值isRaised(){
提高回报率;
}
@凌驾
已执行的公共无效操作(操作事件evt){
//做任何需要做的事
setRaised(!isRaised());
}
@凌驾
公众假期{
设定值(假);
}
}
公共类ClearAction扩展了AbstractAction{
私人聊天服务;
公共ClearAction(聊天服务聊天服务){
this.chatService=chatService;
putValue(名称“Clear”);
}
@凌驾
// To create buttons
for(int i=0 ; i < list.length; i++){
Participant pa = list[i];
JButton b = new JButton(pa.getNameButton(),participant);
b.addActionListener(e ->
{
String s = pa.toString() + questionPane.getText();
final ImageIcon raise = resizeIcon(new ImageIcon("src/raise.png"),30,30);
b.setIcon(raise);
JOptionPane.showMessageDialog(null,s,"Welcome to Chat Room",JOptionPane.INFORMATION_MESSAGE,pa.getImage());
});
p.add(b);
}
// Clear button logic
clearButton.addActionListener(e ->{
questionPane.setText("");
hostPane.setText("");
});
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
ChatService chatService = new ChatService();
JPanel panel = new JPanel();
String[] names = new String[] {"Bryan", "Alan", "George", "Henry"};
List<PeopleAction> actions = new ArrayList<>(names.length);
for (String name : names) {
PeopleAction action = new PeopleAction(chatService, name, false);
actions.add(action);
}
Random rnd = new Random();
actions.get(rnd.nextInt(names.length)).setRaised(true);
for (Action action : actions) {
JButton btn = new JButton(action);
panel.add(btn);
}
setLayout(new GridLayout(2, 1));
add(panel);
JPanel hostPane = new JPanel();
JButton clearButton = new JButton(new ClearAction(chatService));
hostPane.add(clearButton);
add(hostPane);
}
}
public class ChatService {
private List<ChatListener> listeners = new ArrayList<>(25);
public void addChatListeners(ChatListener listener) {
listeners.add(listener);
}
public void removeChatListener(ChatListener listener) {
listeners.remove(listener);
}
protected void fireChatCleared() {
if (listeners.isEmpty()) {
return;
}
for (ChatListener listener : listeners) {
listener.chatCleared();
}
}
public void clear() {
// Do what's required
fireChatCleared();
}
}
public interface ChatListener {
public void chatCleared();
}
public class PeopleAction extends AbstractAction implements ChatListener {
private String name;
private boolean raised;
public PeopleAction(ChatService chatService, String name, boolean raised) {
// You can use either LARGE_ICON_KEY or SMALL_ICON to set the icon
this.name = name;
if (raised) {
putValue(NAME, "* " + name);
} else {
putValue(NAME, name);
}
chatService.addChatListeners(this);
}
public void setRaised(boolean raised) {
if (raised) {
putValue(NAME, "* " + name);
} else {
putValue(NAME, name);
}
}
public boolean isRaised() {
return raised;
}
@Override
public void actionPerformed(ActionEvent evt) {
// Do what ever needs to be done
setRaised(!isRaised());
}
@Override
public void chatCleared() {
setRaised(false);
}
}
public class ClearAction extends AbstractAction {
private ChatService chatService;
public ClearAction(ChatService chatService) {
this.chatService = chatService;
putValue(NAME, "Clear");
}
@Override
public void actionPerformed(ActionEvent evt) {
chatService.clear();
}
}
}