Java JLabel赢得';t更新
编辑版,我希望这是你要找的。我试图在这个版本中只保留必要的东西。我不知道还能写什么,但我不能上传这个编辑,因为代码太大,文本太小,所以我写随机的stuf 主要类别:Java JLabel赢得';t更新,java,swing,Java,Swing,编辑版,我希望这是你要找的。我试图在这个版本中只保留必要的东西。我不知道还能写什么,但我不能上传这个编辑,因为代码太大,文本太小,所以我写随机的stuf 主要类别: package Clicker; import javax.swing.JFrame; public class mainClass { public static void main(String[] args) { ClickerGame CG = new ClickerGame();
package Clicker;
import javax.swing.JFrame;
public class mainClass {
public static void main(String[] args) {
ClickerGame CG = new ClickerGame();
JFrame frame = new JFrame("CarCollectionarV1");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CG.addComponentToPane(frame.getContentPane());
frame.pack();
frame.setVisible(true);
frame.setResizable(true);
frame.setSize(1000, 700);
}
}
单击名称类:
package Clicker;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class ClickerGame implements ActionListener {
JButton jbtnMoney = new JButton("Click");
JButton jbtnBoxes = new JButton("Click");
final static String Click = "Click";
//Make TabbedPane
public void addComponentToPane(Container pane){
jbtnMoney.addActionListener(this);
jbtnBoxes.addActionListener(this);
LabelsHolder Labels = new LabelsHolder(); // Imports JLabels
//Visual
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.setTabPlacement(JTabbedPane.TOP);
//MainPanel
JPanel MainPanel = new JPanel();
JPanel MainPanelSub = new JPanel();
MainPanelSub.setLayout(new BoxLayout(MainPanelSub, BoxLayout.PAGE_AXIS));
JPanel MainPanelSub2 = new JPanel();
MainPanelSub2.setLayout(new BoxLayout(MainPanelSub2, BoxLayout.PAGE_AXIS));
MainPanelSub.add(Labels.MoneyLabel);
MainPanelSub.add(Labels.MoneyClicksLabel);
MainPanelSub.add(jbtnMoney);
MainPanelSub2.add(Labels.BoxesLabel);
MainPanelSub2.add(Labels.BoxesClicksLabel);
MainPanelSub2.add(jbtnBoxes);
MainPanel.add(MainPanelSub);
tabbedPane.addTab(Click, MainPanel);
pane.add(tabbedPane, BorderLayout.CENTER);
}
MainHolder CarMain = new MainHolder();
LabelsHolder Labels = new LabelsHolder();
//Button Click
public void actionPerformed(ActionEvent ae) {
//Money Button Click
if(ae.getSource() == jbtnMoney) {
CarMain.main[0] += 1;
CarMain.main[1] += 1;
Labels.MoneyLabel.setText("Test");
}
}
}
标签架类别:
package Clicker;
import javax.swing.JLabel;
class LabelsHolder {
MainHolder CarMain = new MainHolder();
public JLabel MoneyLabel = new JLabel();
public JLabel MoneyClicksLabel = new JLabel();
public JLabel BoxesLabel = new JLabel();
public JLabel BoxesClicksLabel = new JLabel();
public LabelsHolder(){
MoneyLabel.setHorizontalTextPosition(JLabel.CENTER);
MoneyLabel.setVerticalTextPosition(JLabel.BOTTOM);
MoneyLabel.setText("Money: " + CarMain.main[0]);
MoneyClicksLabel.setHorizontalTextPosition(JLabel.CENTER);
MoneyClicksLabel.setVerticalTextPosition(JLabel.BOTTOM);
MoneyClicksLabel.setText("Money Clicks: " + CarMain.main[1]);
BoxesLabel.setHorizontalTextPosition(JLabel.CENTER);
BoxesLabel.setVerticalTextPosition(JLabel.BOTTOM);
BoxesLabel.setText("Boxes: " + CarMain.main[2]);
BoxesClicksLabel.setHorizontalTextPosition(JLabel.CENTER);
BoxesClicksLabel.setVerticalTextPosition(JLabel.BOTTOM);
BoxesClicksLabel.setText("Boxes Clicks: " + CarMain.main[3]);
}
}
主要持有人类别:
package Clicker;
public class MainHolder {
public Integer main[] = new Integer[4];
public MainHolder(){
MakeMain();
}
public void MainMaker(int k,int p){
main[p] = k;
}
public void MakeMain(){
int i=0;
MainMaker(0,i); // Money
i++;
MainMaker(0,i); // Money Clicks
i++;
MainMaker(0,i); // Boxes
i++;
MainMaker(0,i); // Boxes Clicks
i++;
}
}
您正在创建两个LabelsHolder实例:
class ClickerGame implements ActionListener {
// ....
LabelsHolder Labels = new LabelsHolder(); // **** here
// Visual
// .....
}
// and here!!!@
MainHolder CarMain = new MainHolder();
LabelsHolder Labels = new LabelsHolder();
这样做意味着您的ActionListener正在更改非可视化JLabel的状态。解决方案:只创建并使用一个。因此,去掉构造函数中声明的实例,而只使用实例字段
其他建议:
- 你会想要学习和使用。变量名都应该以小写字母开头,而类名应该以大写字母开头。学习这一点并遵循这一点可以让我们更好地理解您的代码,也可以让您更好地理解其他人的代码
- 您应该避免使用公共字段,并允许其他类直接访问这些字段。最好使用私有字段和公共方法来限制对象状态的暴露
标签
?这些类如何交互?请创建并发布一个有效的链接,以便我们能够更好地理解您的代码和问题(请阅读链接)。作为旁白,您需要学习和使用。变量名都应该以小写字母开头,而类名应该以大写字母开头。学习并遵循这一点可以让我们更好地理解您的代码,也可以让您更好地理解其他人的代码。此外,设置JLabel的文本后,无需调用repaint()
。我的猜测是,您正在设置一个无法可视化的JLabel文本,但根据您目前发布的内容,我无法证明这一猜测。另外,我看到你已经编辑了你的问题,因为我在上面的评论,但还没有真正改善到足以回答。请帮助我们帮助您。@HovercraftFullOfEels我尝试过,编辑代码,希望您现在能理解。感谢您的更新--我知道这听起来很自私,但我想看到更多。而且更少。请尝试创建一个新的程序,一个小程序,但我们可以复制、粘贴到IDE中,并且实际运行时不做任何更改,这为我们显示了问题所在,一个有效的(请再次阅读链接)。这将作为你的问题代码发布在这里,就像你上面发布的代码一样,而不是发布在链接中。如果你能把这篇文章贴出来并且做得好,我几乎可以保证你会得到及时的答复。