jtextfield有没有一种方法来呈现不同于从gettext方法获得的值的ui值?

y3bcpkx1  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(487)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

上个月关门了。
改进这个问题
我试图创建一个自定义文本字段,当登录用户没有访问数据的权限时,自定义文本字段需要屏蔽该值,但是gettext方法中文本字段内的实际值不能更改,因为该值需要执行一些验证。因为jtable是通过使用自定义的渲染器来完成的,但是textfield似乎没有任何渲染器。
示例:交易窗体中,有一个余额字段显示帐户余额,但实际余额不应显示为所有者以外的其他用途,因此ui将显示0,但当用户继续进行交易时,文本字段中的实际余额仍应能够获得以供验证。
我尽量避免使用临时变量来存储实际值。如果未经授权,客户端不接受隐藏字段。
我还尝试不将代码更改为面板级或窗体级,以尽量减少对所有现有窗体实现此增强的工作量。

jjjwad0x

jjjwad0x1#

创建两个 JTextField 其中一个是实际金额,另一个是零金额。两者相加 JTextFieldJPanel cardlayout只显示 JTextField . 下面是一个演示。

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.ComponentOrientation;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class SwapFlds implements ActionListener {
    private JFrame  frame;
    private JPanel  swapper;

    @Override // java.awt.event.ActionListener
    public void actionPerformed(ActionEvent event) {
        CardLayout cl = (CardLayout) swapper.getLayout();
        cl.next(swapper);
    }

    private JPanel createButton() {
        JButton button = new JButton("Swap");
        button.addActionListener(this);
        JPanel panel = new JPanel();
        panel.add(button);
        return panel;
    }

    private JPanel createSwapper() {
        swapper = new JPanel(new CardLayout());
        JPanel real = new JPanel();
        JTextField realAmount = new JTextField(10);
        realAmount.setText("Real amount");
        real.add(realAmount);
        swapper.add(real, "real");
        JPanel dummy = new JPanel();
        JTextField dummyAmount = new JTextField(10);
        dummyAmount.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        dummyAmount.setText("0");
        dummy.add(dummyAmount);
        swapper.add(dummy, "dummy");
        return swapper;
    }

    private void showGui() {
        frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(createSwapper(), BorderLayout.PAGE_START);
        frame.add(createButton(), BorderLayout.PAGE_END);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> new SwapFlds().showGui());
    }
}

相关问题