如何在JavaSwing中将文本或标签添加到jpanel网格中
我有一个JPanel,用于创建可单击的面板网格。我试图在单击面板中的特定网格时添加标签。我尝试使用add方法放置代码,但没有添加标签 代码:如何在JavaSwing中将文本或标签添加到jpanel网格中,java,swing,user-interface,jpanel,jlabel,Java,Swing,User Interface,Jpanel,Jlabel,我有一个JPanel,用于创建可单击的面板网格。我试图在单击面板中的特定网格时添加标签。我尝试使用add方法放置代码,但没有添加标签 代码: //================================================ //创建可单击的面板网格 公共类中心面板扩展了JPanel{ 静态JLabel labelText=新的JLabel(“计划”,JLabel.CENTER); 公共中心面板(整行、整列){ setLayout(新网格布局(行、列)); setBorder(
//================================================
//创建可单击的面板网格
公共类中心面板扩展了JPanel{
静态JLabel labelText=新的JLabel(“计划”,JLabel.CENTER);
公共中心面板(整行、整列){
setLayout(新网格布局(行、列));
setBorder(BorderFactory.createEmptyByOrder(1,1,1,1));
对于(int i=0;i|
刚刚更改为匿名类,然后可以使用setVisible(true)。我添加了一些其他的东西,只是为了让它在我这边也起作用
public class CenterPanel extends JFrame {
static JLabel labelText = new JLabel("SCHEDULED",JLabel.CENTER);
public CenterPanel(int row, int col) {
this.setSize(row*50, col*50);
setLayout(new GridLayout(row, col));
//setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
JPanel pan = new JPanel();
pan.setEnabled(true);
pan.setBackground(Color.WHITE);
pan.setPreferredSize(new Dimension(3, 3));
pan.setBorder(BorderFactory.createLineBorder(Color.BLACK));
// an exception to not click the top row and most left column headers
if (i != 0 && j != 0) {
pan.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent arg0) {
pan.setBackground(Color.RED);
pan.add(new JLabel("HIT"));
setVisible(true);
}
}); // add a mouse listener to make the panels clickable
}
// set names for each panel for later use
pan.setName("PANEL_" + i + "_" + j);
add(pan);
setVisible(true);
}
}
}
公共类中心面板扩展JFrame{
静态JLabel labelText=新的JLabel(“计划”,JLabel.CENTER);
公共中心面板(整行、整列){
此.setSize(行*50,列*50);
setLayout(新网格布局(行、列));
//setBorder(BorderFactory.createEmptyByOrder(1,1,1,1));
对于(int i=0;i|
}您的代码运行得非常好。问题是,当您在运行时向JPanel添加组件(JLabel)时,您没有重新验证面板,因此在重新验证面板之前不会出现更改。在要添加组件的面板上使用
revalidate()
方法。
下面是修改后的BoxListener
类
static class BoxListener extends MouseAdapter{
public void mouseClicked(MouseEvent me)
{
JPanel clickedBox =(JPanel)me.getSource();
clickedBox.setBackground(Color.RED);
clickedBox.add(labelText);
//add below method
clickedBox.revalidate();
}
}
使用按钮,每个按钮状态有不同的图标(有些包含文本),或者继续使用面板并使用
CardLayout
在状态之间切换。为了更快地获得更好的帮助,请发布或。按照您的方式,jlabel一次只能添加到一个面板。您的代码也正常工作,但是ui没有以正确的方式更新。您可以通过单击1面板,然后调整窗口大小来测试它。这仍然有一些奇怪的行为。至少在我的电脑上。单击除1个面板外的所有面板后,我单击最后一个面板,所有其他面板变为白色,而最后一个面板变为红色。我已尝试添加clickedBox.revalidate,效果良好。但是当我尝试调整窗口大小时,它会从clickedBox面板中删除标签。处理这个问题的最佳方法是什么?
static class BoxListener extends MouseAdapter{
public void mouseClicked(MouseEvent me)
{
JPanel clickedBox =(JPanel)me.getSource();
clickedBox.setBackground(Color.RED);
clickedBox.add(labelText);
//add below method
clickedBox.revalidate();
}
}