簡體   English   中英

在 JPanel 中初始化 JButton 后,我無法修改它

[英]I can't modify my JButton after having initialized it in the JPanel

import javax.swing.;
import java.awt.;

public class Space extends JFrame {
   

    private JButton[][] jb;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Space frame = new Space();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Space() {
         JPanel contentPane=new JPanel();
         contentPane.setLayout(new BorderLayout(0, 0));
         JPanel p=new JPanel();
         contentPane.add(p);

         setContentPane(contentPane);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);

        p.setLayout(new GridLayout(20,20));
        jb=new JButton[20][20];
        for(int i=0;i<jb.length;i++) {
            for(int j=0;j<jb[i].length;j++) {
                jb[i][j]=new JButton();
                jb[i][j].setIcon(new ImageIcon(getClass().getResource("i1.jpg")));
                p.add(jb[i][j]);
            }
        }
        JButton b=new JButton();
        b.setIcon(new ImageIcon(getClass().getResource("i2.jpg")));
        jb[10][10]=b; // when i set this cell, when i run, the icon of jb[10][10] didn't modified



    }

}

我嘗試修改我的按鈕 jb[10][10] 但是當我運行所有按鈕時都具有相同的圖標,我希望按鈕也共享 b 圖標的所有值

我使用 gridlayout 創建了一個 20x20 的按鈕矩陣。 問題出在底部,當我想修改已經初始化的按鈕時..

關於,

我無法修改我的按鈕...

是的,你可以,但這不是你的代碼想要做的。 在嵌套的 for 循環中,您有這一行:

p.add(jb[i][j]);

它添加了一個已經創建並放置在jb數組中的 JButton object。 因此 JPanel中的 JButton 與添加到 2D 數組的 JButton 相同

但是后來,把數組元素引用的object改成這里:

jb[10][10]=b;

當您執行此操作時,位於 position [10][10] 的數組中的 JButton 不再是相同的 object,因此您不是在“修改 JButton”,而是在一個包含對 JButton 的引用的 object 中交換引用,二維數組,但不在另一個 object 中,它包含對按鈕的引用,即 JPanel。 所以現在數組和 JPanel 在 position 處有不一致的引用。

相反,要執行您想要的操作,您必須顯式更改已存在且已由 JPanel 和數組持有按鈕的 state

// *** not this ***
// JButton b=new JButton();
// b.setIcon(new ImageIcon(getClass().getResource("i2.jpg")));
// jb[10][10]=b;

// *** but instead THIS ***
Icon icon = new ImageIcon(getClass().getResource("i2.jpg"));
jb[10][10].setIcon(icon); // change the state, not the reference

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM