【问题标题】:Simple Disabling of JPanels in JTabbedPane在 JTabbedPane 中简单禁用 JPanel
【发布时间】:2014-11-02 07:55:17
【问题描述】:

所以我一直在尝试使用简单的布尔值禁用/启用 jTabbedPane(在 Netbeans 上)中的 jPanel,而布尔值总是卡在 false 上。通过单击按钮触发 jTabbedPane 中 jPanel 的禁用/启用。这是我的代码的摘录:

package programming.club;

/**
 *
 * @author RandomGuy
 */

public class GranadaProgrammingClubUI extends javax.swing.JFrame {

public static boolean allowNavigation = true;



/**
 * Creates new form ProgrammingClubUI
 */
public ProgrammingClubUI() {
    initComponents();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:

        if (allowNavigation == false) {
             jTabbedPane1.setEnabledAt(0, true);
            allowNavigation = true;
         }
        if (allowNavigation == true) {
            jTabbedPane1.setEnabledAt(0, false);
            allowNavigation = false;
         }

         System.out.println(allowNavigation);

    }

我把 System.out.println(allowNavigation);只是为了检查 allowNavigation 的值是什么,每次单击按钮时,该值都保持为 false,但它应该正在切换,并更改 jPanel 的状态,启用或禁用! (我想)我真的不知道这里出了什么问题。感谢您的宝贵时间。

【问题讨论】:

  • static 不是您的朋友,请注意。考虑提供一个runnable example 来证明您的问题。这将导致更少的混乱和更好的响应
  • allowNavigation == true 也不需要使用 (allowNavigation) 代替
  • 谢谢,MadProgrammer,我应该注意到static,这只是在其他程序中做了这么多之后的一种习惯。另外,我知道那条捷径,madhawa priyashantha。我刚刚更改了它以确保它不会引起某种问题。再次感谢,伙计们!
  • 如果上述建议未能帮助您解决问题,请考虑创建并发布minimal example program 并更详细地解释您的问题,包括您期望的行为与您的行为'得到。
  • @madhawapriyashantha 不需要大喊大叫... ;)

标签: java swing boolean boolean-logic


【解决方案1】:

我认为问题是

if (allowNavigation == false) {
     jTabbedPane1.setEnabledAt(0, true);
    allowNavigation = true;
 }
if (allowNavigation == true) {
    jTabbedPane1.setEnabledAt(0, false);
    allowNavigation = false;
 }

你应该使用

     if (allowNavigation == false) {
         jTabbedPane1.setEnabledAt(0, true);
        allowNavigation = true;
     }
    else if (allowNavigation == true) {
        jTabbedPane1.setEnabledAt(0, false);
        allowNavigation = false;
     }

因为如果allownavigation为假,它将转到第一个if并使其为true,然后转到第二个if并使其为false

还有很好的布尔检查

if (!allowNavigation) {
     jTabbedPane1.setEnabledAt(0, true);
    allowNavigation = true;
 }
else if (allowNavigation) {
    jTabbedPane1.setEnabledAt(0, false);
    allowNavigation = false;
 }

【讨论】:

  • 有点理解差异,但我同意这个评估...... +1
  • 谢谢!这有帮助。问题解决了,@MadProgrammer!
  • 仅供参考,逻辑可以减少到只有 2 行:(1) allowNavigation = !allowNavigation; 然后 (2) jTabbedPane1.setEnabledAt(0, allowNavigation);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多