我正在使用GUI并且我正确显示所有内容但是当我按下按钮时我无法更改变量的值。该变量称为passover,它是一个私有int,在0参数构造函数中初始化为1997的值,我有3个按钮,需要在按下时更改逾越节的值。
逾越节守则:
panel.setBorder(
BorderFactory.createEmptyBorder(0, 0, 0, 0));
panel.setLayout(new BorderLayout(0, 0));
JPanel topPanel = getPanel();
topPanel.setLayout(new GridBagLayout());
topPanel.setBackground(new Color(173, 216, 230));
JLabel moveLabel = getLabel("Move Data");
moveLabel.setFont(new Font("Serif", Font.PLAIN, 20));
addComp(topPanel, moveLabel, 0, 0, 1, 1, 0.5, 0.2,
GridBagConstraints.HORIZONTAL, GridBagConstraints.NORTHEAST);
JLabel passoverLabel = getLabel(" Passover : " + passover);
passoverLabel.setFont(new Font("Serif", Font.PLAIN, 20));
addComp(topPanel, passoverLabel, 1, 0, 1, 1, 0.5, 0.2,
GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER);
按钮代码:
JPanel bottomRightPanel = getPanel();
bottomRightPanel.setBorder(
BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
bottomRightPanel.setLayout(new GridBagLayout());
bottomRightPanel.setBackground(new Color(255, 105, 180));
JPanel passoverButtonPanel = getPanel();
passoverButtonPanel.setBackground(new Color(255, 105, 180));
passoverButtonPanel.setLayout(new BoxLayout(passoverButtonPanel, BoxLayout.Y_AXIS));
nextPassoverButton = new JButton("Next Passover");
goToPassoverButton = new JButton("Go To Passover: ");
previousPassoverButton = new JButton("Previous Passover");
JLabel filler = getLabel(" ");
goToField = new JTextField(6);
goToField.setPreferredSize(new Dimension(5, 30));
theHandler handler = new theHandler();
nextPassoverButton.addActionListener(handler);
goToPassoverButton.addActionListener(handler);
previousPassoverButton.addActionListener(handler);
goToField.addActionListener(handler);
我想要在按下nextPassoverButton时将逾越节的值提高一个,在按下previousPassoverButton时降低一个逾越节值,并在按下goToPassoverButton时更改为用户输入goToField的值。
我的ActionListener类看起来像:
public class theHandler extends MyDataPalV2 implements ActionListener{
public void actionPerformed(ActionEvent event)
{
if (event.getSource() == goToField)
{
this.passover = Integer.parseInt(String.format("%s", event.getActionCommand()));
}
if (event.getSource() == nextPassoverButton)
{
this.passover++;
}
if (event.getSource() == previousPassoverButton)
{
this.passover--;
}
}
}
错误是私有访问错误,所以我想我需要使用getter和setter,但我不知道我会怎么做。也许有完全不同的方法来做到这一点?
这是我第一次在这里发帖,很抱歉,如果我在帖子中犯了任何错误。
答案 0 :(得分:1)
您无法通过'=='比较两个对象。改为使用.equals(Object)。
if(event.getSource().equals(goToField))
答案 1 :(得分:1)
getter和setter将是与私有int逾越法相同的类中的公共方法。 get方法只是一行mehtod,它返回私有int的值。像
public static int getPassover(){
return passover;
}
它起作用,因为它与逾越节属于同一类,因此可以访问它。
直接设置器设置值:
public static void setPassover(int num){
passover = num;
}
如果您使用线程,请注意这一点。
对于您的方法,如果您想使用get set方法,可以像
一样增加它setPassover(getPassover() + 1);
如果逾越不是类变量,您将从方法标题中取出'static'。这有意义吗?
答案 2 :(得分:0)
在逾越值更改后,必须在处理程序代码中将新passover
值设置为passoverLabel
。另外,你看不到标签上的新价值。
passoverLabel.setText(Integer.toString(passover))