亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從外部更改和更新 JPanel 組件,從 JFrame 不工作,Swing

從外部更改和更新 JPanel 組件,從 JFrame 不工作,Swing

弒天下 2022-06-15 09:31:18
我正在使用 JPanel(更改其組件),但我想從外部 JFrame 更改它。抱歉,我用 Netbeans 編寫了這段代碼(我知道它放了一些這個問題不需要的東西)并嘗試清理編輯它,因為真正的代碼更大這里是 JPanel 的代碼,名稱為“MyPanel”。    public class MyPanel extends javax.swing.JPanel {      private javax.swing.JButton filling = new javax.swing.JButton();      private javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane();      private javax.swing.JTable myTable = new javax.swing.JTable();      private final javax.swing.table.DefaultTableModel INITIAL_TABLE_MODEL = new javax.swing.table.DefaultTableModel(          new Object[][]{},          new String[]{"Text", "Integer"}      );      public MyPanel() {        initComponents();        //callFilling(); // INNER CALL!      }      private void initComponents() {        filling.setText("filling");        filling.addActionListener(new java.awt.event.ActionListener() {          public void actionPerformed(java.awt.event.ActionEvent evt) {            fillingActionPerformed(evt);          }        });        myTable.setModel(new javax.swing.table.DefaultTableModel(          new Object [][] { },          new String [] { "Text", "Integer" }       ) {          Class[] types = new Class [] {            java.lang.String.class, java.lang.Integer.class          };          public Class getColumnClass(int columnIndex) {            return types [columnIndex];          }        });        jScrollPane1.setViewportView(myTable);        );      }                   當callFilling();是從 JPanel (審查 INNER CALL)工作!,但從 JFrame (審查 //OUTER CALL)不工作!查看此問題Update content of JPanel on a frame on button click in another frame我使用 的建議revalidate(); repaint(); 代碼,但不起作用。如何解決這個問題?
查看完整描述

1 回答

?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

MyPanel myPanel = addNewTab();

myPanel.callFilling(); //OUTER CALL!

myPanel.revalidate();

myPanel.repaint();

addNewTab();

不確定您要做什么。


您創建一個 MyPanel 對象并在其上調用 callFilling() 以設置 TableModel 中的值。但是您從未真正將面板添加到框架中。


只需在將組件添加到可見面板時調用 revalidate() 和 repaint()。


然后你調用addNewTab()which :


MyPanel myPanel = new MyPanel();

myTabbed.insertTab(title, null, new MyPanel(), null, idx);

return myPanel;

同樣,這對您創建 2 個 MyPanel 對象沒有任何意義。您將一個對象添加到選項卡式窗格,然后返回第二個 MyPanel 對象。


所以你已經創建了 3 個 MyPanel 對象。


我真的不確定您要做什么。我不知道您是否要嘗試將面板添加到框架中,或者將面板添加到選項卡式窗格中,所以我真的無法提出具體建議。


在任何情況下,您都需要構建您的代碼,以便僅在 MyObject 對象上創建,并且您需要將該面板添加到選項卡式窗格或框架,但不能同時添加。


查看完整回答
反對 回復 2022-06-15
  • 1 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號