【问题标题】:JPanel data getting changed on mouse clickJPanel 数据在鼠标单击时发生变化
【发布时间】:2023-03-07 11:17:01
【问题描述】:

我在我的 Swing 应用程序中使用了三个 JButtons。当我点击每个按钮时,相应的数据(格式为JTableJScrollPane)将显示在JPanel 上。

问题:当我调整JFrame 的大小时,JPanel 正在替换为默认按钮(我首先单击的按钮)信息而不是当前的JButton 信息。

我的示例代码:

      jbutton1.addActionListener(this);
      jbutton2.addActionListener(this); 

    public void actioPerformed(ActionEvent e){
    if(e.getActionCommand.equals("button1"))
    JPanel.add(table1);
     }
    if(e.getActionCommand.equals("button2"))
     JPanel.add(table1);
      }.......

【问题讨论】:

  • 您需要提供更多代码。请提供足够的信息,以便我们重现该问题的工作示例。
  • 此处发布的代码只字未提所描述的问题,为了获得更好的帮助,请尽快发布SSCCE,简短,可运行,可编译,

标签: java swing jbutton


【解决方案1】:

调整JPanel 的大小不会突然替换组件或向面板添加其他组件。

我最好的猜测(由于问题中的信息有限,这是一个猜测)是您的任何按钮都没有真正起作用,只是显示了错误的信息。

您发布的代码仅包含add,没有对布局进行任何重新验证。请查阅Container#add 方法的javadoc。调整大小时,布局会重新验证,您会看到 JPanel 中实际包含的内容。

可能的解决方案:

  • 在您的面板和您的ActionListener 中致电invalidaterepaint
  • 使用CardLayout 在不同组件之间切换

我个人更喜欢CardLayout 选项,但这可能取决于具体情况。

请注意,在您发布的代码中,您为两个按钮添加了table1。可能是复制粘贴问题,或者您的实际代码有问题。

【讨论】:

    【解决方案2】:

    我无法清楚地表达问题。很抱歉给您带来不便。

    JPanel.removeAll() 方法解决了我的问题。

    我在将任何新组件添加到 JPanel 之前添加了此方法。这修复了 JPanel 的意外行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多