gpt4 book ai didi

Java JLabel 不会更新

转载 作者:行者123 更新时间:2023-11-30 07:32:03 25 4
gpt4 key购买 nike

编辑版本,我希望这就是您正在寻找的内容。我尝试在这个版本中只保留必需的东西。我不知道还要写什么,但我无法上传此编辑,因为代码太大而文本太小,所以我写随机的东西..

主类:

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);

}
}

ClickerGame 类:

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");
}
}
}

LabelsHolder 类:

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 的状态。解决方案:仅创建并使用一个。因此,摆脱在构造函数内部声明的实例,而只使用实例字段。

其他建议:

  • 您将想要学习和使用Java naming conventions 。变量名应全部以小写字母开头,而类名应以大写字母开头。学习并遵循这一点将使我们能够更好地理解您的代码,并且将使您更好地理解其他人的代码。
  • 您应该避免使用公共(public)字段并允许其他类直接访问这些字段。更好的方法是使用私有(private)字段和公共(public)方法来限制对象状态的暴露。

关于Java JLabel 不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35972035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com