我想更改JDialog中标签的文本,当我单击JButton时,因为标签位于另一个类上,我不知道如何从框架类访问它。所以我想出了一个检查对话状态的动作侦听器的概念。 - 当JDialog可见时,检索此数据并将此数据设置为标签。 这可能吗?对于JDialog状态的Actionlistener
这是我的房间类的代码。
public void rooms()
{
bh = new ButtonHandler();
presidentialRoom = new JButton[presidentialRoomNo.length];
deluxeRoom = new JButton[deluxeRoomNo.length];
classicRoom = new JButton[classicRoomNo.length];
for(int x = 0;x<classicRoomNo.length;x++){
//classic rooms
ImageIcon imageC = new ImageIcon("C:\\Users\\John\\workspace" +
"\\SystemTest\\src\\Images\\classicRooms.JPG"); // image
classicRoom[x] = new JButton(classicRoomNo[x],imageC);
classicRoom[x].setBackground(Color.WHITE);
classicRoom[x].setBorder(new CompoundBorder(BorderFactory.createEtchedBorder(Color.WHITE,Color.GRAY),
BorderFactory.createEtchedBorder(Color.WHITE,Color.GRAY)));
classicRoom[x].addActionListener(bh);
classicSubPanel.add(classicRoom[x]);
//deluxe rooms
ImageIcon imageD = new ImageIcon("C:\\Users\\John\\workspace" +
"\\SystemTest\\src\\Images\\deluxeRooms.JPG"); // image
deluxeRoom[x] = new JButton(deluxeRoomNo[x],imageD);
deluxeRoom[x].setBackground(Color.WHITE);
deluxeRoom[x].setBorder(new CompoundBorder(BorderFactory.createEtchedBorder(Color.WHITE,Color.GRAY),
BorderFactory.createEtchedBorder(Color.WHITE,Color.GRAY)));
deluxeRoom[x].addActionListener(bh);
deluxeSubPanel.add(deluxeRoom[x]);
//presidential rooms
ImageIcon imageP = new ImageIcon("C:\\Users\\John\\workspace" +
"\\SystemTest\\src\\Images\\presidentialRooms.JPG"); // image
presidentialRoom[x] = new JButton(presidentialRoomNo[x],imageP);
presidentialRoom[x].setBackground(Color.WHITE);
presidentialRoom[x].setBorder(new CompoundBorder(BorderFactory.createEtchedBorder(Color.WHITE,Color.GRAY),
BorderFactory.createEtchedBorder(Color.WHITE,Color.GRAY)));
presidentialRoom[x].addActionListener(bh);
presidentialSubPanel.add(presidentialRoom[x]);
}
}
这里每个按钮访问RoomProfile类
public class ButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
RoomProfile rooms = new RoomProfile();
room.setVisible(true);
}
}
继承人的一段代码从RoomProfile:
public void createLabels()
{
labels = new JLabel[topTextLabels.length];
inputLabels = new JLabel[topTextLabels.length];
for(int x = 0; x<topTextLabels.length;x++)
{
labels[x] = new JLabel(topTextLabels[x]);
labels[x].setForeground(Color.WHITE);
inputLabels[x] = new JLabel("test");
inputLabels[x].setForeground(Color.WHITE);
}
}
的我想改变该文本是“inputLabels [] “当单击房间课程中的按钮时,我想让用户看到该房间的配置文件。
输入标签将显示来自数据库的数据。
为什么你不能从访问类的JLabel JDialog类?为什么不能递归循环JDialog#getComponents()直到找到JLabel? – DankMemes
@ZoveGames如果JLabel在另一个类上,我怎么能设置文本?从我的框架上的动作侦听器?请演示 – NOOBprogrammer
正确的处理方法是在Dialog类中提供一个方法来更新标签。您可以检查对话框是否可见,然后调用该方法。 –