【发布时间】:2012-10-07 21:07:02
【问题描述】:
我想在单击 JButton 时更改 JDialog 中标签的文本,因为标签位于另一个类上,我不知道如何从框架类访问它。所以我想出了一个检查对话框状态的动作监听器的想法。 - 当 JDialog 可见时,检索此数据并将此数据设置为标签。 这可能吗?
这是我房间类的代码。
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[]”,当我点击房间类中的按钮时,我想让用户看到该房间的配置文件。
输入标签将显示数据库中的数据。
【问题讨论】:
-
为什么不能从JDialog类访问JLabel类?为什么在找到 JLabel 之前不能递归循环 JDialog#getComponents()?
-
@ZoveGames 如果 JLabel 在另一个类上,我如何设置文本?从框架上的动作侦听器?请示范
-
处理此问题的正确方法是在 Dialog 类中提供一个方法来更新标签。您可以检查对话框是否可见,然后调用该方法。
-
@AKJ 我知道了这个方法,但是你能给我一个条件示例,我将把它放在主框架的动作侦听器上,以了解对话框是否可见。
-
你可以试试 JDailog 的 isVisible() 方法。但是由于您将自己创建对话框,因此您可以在关闭对话框后执行一些操作,例如使引用为 null,以便在用户可见时引用为非 null。
标签: java swing jbutton actionlistener jdialog