【问题标题】:How to change (add or subtract) the value of a JLabel?如何更改(添加或减去)JLabel 的值?
【发布时间】:2021-08-22 17:20:50
【问题描述】:

我希望用JButton (***) 为JLabel(500 欧元)添加 100 欧元。由于我无法从String 中添加或减去int 值,所以我不知道该怎么做。

JButton button;

MyFrame(){
    button = new JButton();
    button.setBounds(200, 400, 250, 100);
    button.addActionListener(e -> );
    button.setText("***");

    JLabel amount = new JLabel("500 EUR");
    amount.setBounds(35, 315, 500, 100);

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setSize(1200, 850);
    frame.add(button);
    frame.add(amount);
    frame.setLayout(null);
    frame.setVisible(true);
}

GUI

【问题讨论】:

  • 请至少显示一个尝试以向该 ActionListener 添加代码。有大量教程可以帮助您学习如何使用它们,这不是代码编写服务,也不是“请指出正确的方向”网站。
  • 由于我无法从字符串中添加或减去 int 值, - 您需要重新创建字符串。因此,您需要使用标签的当前 int 值保留一个 int 变量。然后每次按下按钮时 1) 增加值 2) 重新创建用于标签的字符串文本 3) 重置标签的文本。
  • 我很困惑为什么它被关闭了。我觉得主要问题是 OP 无法将 JLabel 中的 String 转换为 int ,而不是向 JButton 添加动作侦听器
  • 就像@camickr 说的,或者你也可以从标签中获取文本,用空格“”拆分的拆分方法拆分标签,获取第一个元素,然后增加它的值并设置回到标签:amount.setText((Integer.parseInt(amount.getText().split(“”)[0]) + 100) + “EUR”);
  • frame.setLayout(null); 1) Java GUI 必须在不同的语言环境中使用不同的 PLAF 在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。 2) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以显示应如何使用额外空间。

标签: java swing jlabel


【解决方案1】:

如何更改(加或减)JLabel 的值?
...由于我无法从 String 中添加或减去 int 值,所以我不知道该怎么做。

这是在以稍微错误的方式思考问题。欧元数量应单独保存为int 值。执行操作时,将值递增并将其设置为后缀为" EUR" 的字符串。

这是一个完整的(准备运行)示例:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class EuroCounter {

    private JComponent ui = null;
    int euros = 1000;
    String suffix = " EUR";
    JLabel amount = new JLabel(euros + suffix, JLabel.CENTER);

    EuroCounter() {
        initUI();
    }

    public final void initUI() {
        if (ui != null) {
            return;
        }

        ui = new JPanel(new BorderLayout(4, 4));
        ui.setBorder(new EmptyBorder(4, 4, 4, 4));

        JButton button;

        button = new JButton("+");
        button.setMargin(new Insets(20, 40, 20, 40));
        ActionListener incrementListener = (ActionEvent e) -> {
            amount.setText((euros+=100) + suffix);
        };
        button.addActionListener(incrementListener);
        JPanel leftAlign = new JPanel(new FlowLayout(FlowLayout.LEADING));
        leftAlign.add(button);
        ui.add(leftAlign, BorderLayout.PAGE_START);

        amount.setBorder(new EmptyBorder(30, 150, 30, 150));
        amount.setFont(amount.getFont().deriveFont(50f));
        ui.add(amount, BorderLayout.CENTER);
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = () -> {
            EuroCounter o = new EuroCounter();
            
            JFrame f = new JFrame(o.getClass().getSimpleName());
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setLocationByPlatform(true);
            
            f.setContentPane(o.getUI());
            f.pack();
            f.setMinimumSize(f.getSize());
            
            f.setVisible(true);
        };
        SwingUtilities.invokeLater(r);
    }
}

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2013-02-05
    • 2013-12-09
    相关资源
    最近更新 更多