从外部更改和更新 JPanel 组件,从 JFrame 不工作,Swing

我正在使用 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(); 代码,但不起作用。


如何解决这个问题?


弑天下
浏览 97回答 1
1回答

哔哔one

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 对象上创建,并且您需要将该面板添加到选项卡式窗格或框架,但不能同时添加。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java