无论我尝试什么,JPanel都不会更新

时间:2014-05-19 00:40:52

标签: java swing jframe jpanel twitter4j

我制作了一个小程序,显示团队/玩家/然后他们的推特,推文等。我的问题似乎与此无关,但它只是我的jPanel没有更新。我在项目中走得很远,并且我继续在我的方法中抛出随机代码段,以便一旦我点击某些东西,“左”jpanel要么被jbuttons取代,要么jbuttons被放入其中,我已经尝试过。下面是我试图开始工作的代码段,它确实没有达到目的。

public void mousePressed(MouseEvent e) {        
    System.out.println("You clicked on " + ap.getTeams()  [addPlayers.OPTIC].getTeamName());
        for(int i = 0; i<4; i++){
            //JPanel temp = ap.makePanel(ap.getTeams()[ap.OPTIC].getPlayers().get(i).getTwitterScreenName());
            //temp.setBounds(0,(i*125),   450,125);
            //left.add(temp);

            JButton b = new JButton("Test");
            b.setBounds(30,30,30,30);
            left.add(b);
            left.revalidate();
            add(left);
            add(b);
            right.add(b);
            left.setVisible(false);
            left.setVisible(true);

            System.out.println(i);
        }
    }   
}

注释掉的代码是我的主要代码,但我只是使用jbuttons进行测试。正如你所看到的,我只是不断添加随机位,希望能有效。我也尝试过稍后调用,但遗憾的是,这也不起作用。不知道为什么jpanel没有更新,但任何反馈都会很棒,谢谢。

1 个答案:

答案 0 :(得分:6)

  1. 避免使用null布局和setBounds,因为这使得GUI非常不灵活,虽然它们在一个平台上看起来不错但在大多数其他平台或屏幕分辨率上看起来很糟糕,并且很难更新和维护。相反,您将需要学习和学习布局管理器,然后嵌套JPanels,每个JPanels都使用自己的布局管理器来创建令人满意的复杂GUI,这些GUI在所有操作系统上都很好看。
  2. 交换JPanel或任何组件的最佳方法是使用CardLayout
  3. 如果仍然卡住,请发布minimal example program。这是我们真正看到并体验您的问题的最佳方式。
  4. 不要像您一样使用b JButton变量将组件添加到多个容器中。您实际上已将其添加到三个容器中。
  5. 您似乎试图将四个JButton添加到容器中,为它们提供所有相同的边界,一个完全在另一个上面?对不起,但是我看你的代码越多,它就越麻烦。再次,停止这种废话,在Swing教程中了解布局管理器,并使用它们。
  6. "and i keep throwing random code segments in my method to make it so ..." - 在墙上扔东西,看看哪些棍子不是创建程序的好启发式方法。从知识库开始 - 这里是Swing教程和Java API,然后规划您的程序结构,然后创建代码。

  7. 修改
    你问:

      

    .....我问的问题是整个事情没有更新的问题是什么?

    如果您不使用CardLayout并手动更改组件,则需要在更改后调用容器上的revalidate()repaint(),并且容器应使用新的更新组件。如果这不能解决问题,那么您可能会在未向我们展示的代码中遇到问题,然后您将再次创建并发布minimal example program。同样,它是我们实际看到并体验您的问题的最佳方式。