gpt4 book ai didi

java - 想要将值从另一个类/对象数组传递到 CardLayout

转载 作者:行者123 更新时间:2023-11-30 03:30:05 24 4
gpt4 key购买 nike

这是 MessageBox 类。这使用 CardLayout 格式来显示消息集。它是容器类。除了消息之外,我们还发送标签上显示的相应的分钟和秒值。

//Reference - SynforgeTutorials
public class MessageBox extends JFrame{
JPanel p=new JPanel();
CardLayout cards=new CardLayout();
int numQs;


int cardnumber;

CL1 messages[]={

new CL1("Hi! How are you doing ?",1,30,this),
new CL1("I am good thanks",2,0,this),
new CL1("Its a great dayoutside",0,30,this),
new CL1("I am going to go hiking",1,0,this),
new CL1("Maybe I will join you too",1,0,this)

};


public static void main(String[] args) {

new MessageBox();
}

public MessageBox(){
super("Message Box");
setResizable(true);


//setSize(500,400);
setBounds(100, 100, 450, 226);
setDefaultCloseOperation(EXIT_ON_CLOSE);

p.setLayout(cards);

numQs=messages.length;
for(int i=0;i<numQs;i++){
p.add(messages[i],"q"+i);
}

cardnumber = 0;

cards.show(p,"q"+ cardnumber);


add(p);
setVisible(true);
}

这是构造卡片的类。它有 3 个面板 - 显示消息的顶部面板、在标签上显示分钟和秒的中心面板以及显示“确定”按钮的底部面板。单击“确定”按钮后,将显示下一张卡片。

public class CL1 extends JPanel implements ActionListener {
MessageBox mb;


//Message
JPanel qPanel=new JPanel();

//Timer
JPanel tPanel=new JPanel();
JLabel timeLbl = new JLabel("New label");
JButton btnPause=new JButton("Pause");
JButton btnResume=new JButton("Resume");

//bottom
JPanel botPanel=new JPanel();
JButton OK=new JButton("OK");



public CL1(String q, int userMinutes, int userSeconds, MessageBox mb){

this.mb=mb;

setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));


//Message
qPanel.add(new JLabel(q));
add(qPanel);


//Timer

tPanel.add(timeLbl);
tPanel.add(btnPause);
tPanel.add(btnResume);

add(tPanel);


//bottom

//OK.setBounds(323, 139, 97, 25);
OK.addActionListener(this);

botPanel.add(OK);

add(botPanel);
}
////////////////////////////////////////////////////////////////////////////////
public void actionPerformed(ActionEvent e){
Object src=e.getSource();
//OK button
if(src.equals(OK)){

mb.OK();}

}

}

我希望能够从另一个类发送消息、分钟和秒值,并且能够多次调用 MessageBox 类,如下所示。此类发送消息列表以及每条相应消息的分钟和秒数。我想使用不同的消息集多次调用 MessageBox 类。

Calling class
{

public static void main(String[] args) {

String[] displaymsg1 = {"Hi! How are you doing ?","I am good thanks","Its a great dayoutside","I am going to go hiking","Maybe I will join you too"};
int[] mins1 = {1,2,0,1,1};
int[] secs1 = {30,0,30,0,0};
new MessageBox(displaymsg1 ,mins1,secs1);


String[] displaymsg2 = {"Monday","Tuesday","Wednesday","Thursday","Friday"};
int[] mins2 = {0,1,2,3,2};
int[] secs2 = {0,25,0,10,20};
new MessageBox(displaymsg2,mins2,secs2);

}

}

我该如何解决这个问题?我更改了 MessageBox 的构造函数以接受争论并创建了一个 for 循环。但这无法识别对象数组“messages[i]”。

public MessageBox(String displaymsg[],int mins[],int secs[]){


super("Step Message");
setResizable(true);

CL1 messages[];

for(int i=0;i<messages.length;i++)
{
messages[i]={

new CL1(displaymsg[i],mins[i],secs[i],this)

};


}

如有任何建议,我们将不胜感激。谢谢。

最佳答案

您的错误/问题与 Swing 无关,似乎与如何动态创建数组有关。我认为您想要做的是将 messages 变量初始化为长度为 displaymsg.length 的新 CL1 数组,然后在 for 循环中为每个数组创建项目:

public MessageBox(String displaymsg[], int mins[], int secs[]) {
super("Step Message");
setResizable(true);

messages = new CL1[displaymsg.length];

for (int i = 0; i < messages.length; i++) {
messages[i] = new CL1(displaymsg[i], mins[i], secs[i], this);
}
}

话虽如此,我可能会做一些不同的事情。如果您所做的大部分工作是交换消息,那么您甚至可能不需要 CardLayout,而可以简单地交换单个 JLabel 中保存的文本。如果不了解您的实际需求,很难说。

关于java - 想要将值从另一个类/对象数组传递到 CardLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29262535/

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