我正在制作一个小程序来显示团队/球员/然后是他们的推特提要、推文等。不过我的问题似乎与此无关,只是我的 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 来测试。如您所见,我只是不断添加随机位,希望能有所作为。我也尝试稍后调用,但遗憾的是,这也没有用。不知道为什么 jpanels 没有更新,但任何反馈都会很好,谢谢。
最佳答案
- 避免空布局和 setBounds,因为这会导致 GUI 非常不灵活,虽然它们在一个平台上看起来不错,但在大多数其他平台或屏幕分辨率上看起来很糟糕,而且很难更新和维护。相反,您需要研究和学习布局管理器,然后嵌套 JPanel,每个 JPanel 都使用自己的布局管理器来创建在所有操作系统上看起来都不错的令人愉悦的复杂 GUI。
- 交换 JPanel 或任何组件的最佳方法是使用 CardLayout .
- 如果仍然卡住,请发布 minimal example program .这是我们实际了解和体验您的问题的最佳方式。
- 不要像使用
b
JButton 变量那样将一个组件添加到多个容器中。您实际上是将它添加到三个 容器中。 - 您似乎在尝试向容器中添加四个 JButton,为它们提供相同的边界,一个恰好在另一个之上?抱歉,但我越看你的代码,它就变得越古怪。再次强调,停止这种废话,在 Swing 教程中了解布局管理器并使用它们。
“并且我一直在我的方法中抛出随机代码段以使其如此......”
- 将东西扔到墙上看看有什么粘住并不是创建程序的良好启发式方法。从知识库开始——这里是 Swing 教程和 Java API,然后规划您的程序结构,然后创建您的代码。
编辑
你问:
..... All im asking is whats the problem with the whole thing not updateing?
如果您不使用 CardLayout 并手动更改组件,则需要在更改后对容器调用 revalidate()
和 repaint()
,并且容器应该更新其新组件。如果这不能解决问题,那么您可能在代码中遇到了问题,但没有向我们展示,然后您将再次想要创建并发布 minimal example program .同样,这是我们实际了解和体验您的问题的最佳方式。
关于java - JPanel 不更新,无论我尝试什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23728276/