为了账号安全,请及时绑定邮箱和手机立即绑定

从外部更改和更新 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 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信