Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaSwing中将文本或标签添加到jpanel网格中_Java_Swing_User Interface_Jpanel_Jlabel - Fatal编程技术网

如何在JavaSwing中将文本或标签添加到jpanel网格中

如何在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,用于创建可单击的面板网格。我试图在单击面板中的特定网格时添加标签。我尝试使用add方法放置代码,但没有添加标签

代码:

//================================================
//创建可单击的面板网格
公共类中心面板扩展了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();
    }
}