如何在Java中使用GUI添加文本和删除文本

问题描述 投票:0回答:2

我正在创建一个哑巴手机(就像旧的传统手机),我正在使用GUI编程。拨打号码我需要帮助。我不知道如何在显示屏上弹出数字并保持在那里,并且还使用删除按钮删除显示屏上的数字。我将发布一个youtube链接,以便您可以看到示例运行。

我目前停留在传递应该显示数字的每个数字的按钮上的文本,但它显示按钮的文本。我也不知道如何在没有重置按钮的情况下按下其他按钮时保持数字。

这是我的代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.*;

public class DumbPhone extends JFrame
{
private static final long serialVersionUID = 1L;
private static final int WIDTH = 300;
private static final int HEIGHT = 500;

private static final String CALL_BUTTON_TEXT = "Call";
private static final String TEXT_BUTTON_TEXT = "Text";
private static final String DELETE_BUTTON_TEXT = "Delete";
private static final String CANCEL_BUTTON_TEXT = "Cancel";
private static final String SEND_BUTTON_TEXT = "Send";
private static final String END_BUTTON_TEXT = "End";
private static final String CALLING_DISPLAY_TEXT = "Calling...";
private static final String TEXT_DISPLAY_TEXT = "Enter text...";
private static final String ENTER_NUMBER_TEXT = "Enter a number...";

private JTextArea display;

private JButton topMiddleButton;
private JButton topLeftButton;
private JButton topRightButton;

private JButton[] numberButtons;

private JButton starButton;
private JButton poundButton;

private boolean isNumberMode = true;

private String lastPressed = "";
private int lastCharacterIndex = 0;
private Date lastPressTime;

public DumbPhone()
{
    setTitle("Dumb Phone");
    setSize(WIDTH, HEIGHT);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    createContents();
    setVisible(true);
    topLeftButton.setEnabled(false);
}
private void createContents()
{
    //create JPanel, and JTextArea display
    JPanel panel = new JPanel(new GridLayout(5,3));
    display = new JTextArea();
    display.setPreferredSize(new Dimension(280, 80));
    display.setFont(new Font("Helvetica", Font.PLAIN, 32));
    display.setLineWrap(true);
    display.setEnabled(false);
    panel.add(display);
    //create JButtons
    topLeftButton = new JButton(DELETE_BUTTON_TEXT);
    topMiddleButton = new JButton((CALL_BUTTON_TEXT));
    topRightButton = new JButton((TEXT_BUTTON_TEXT));
    numberButtons = new JButton[10];
    numberButtons[1] = new JButton("<html><center>1<br></center></html>");
    numberButtons[2] = new JButton("<html><center>2<br>ABC</center></html>");
    numberButtons[3] = new JButton("<html><right>3<br>DEF</right></html>");
    numberButtons[4] = new JButton("<html><center>4<br>GHI</center></html>");
    numberButtons[5] = new JButton("<html><center>5<br>JKL</center></html>");
    numberButtons[6] = new JButton("<html><center>6<br>MNO</center></html>");
    numberButtons[7] = new JButton("<html><center>7<br>PQRS</center></html>");
    numberButtons[8] = new JButton("<html><center>8<br>TUV</center></html>");
    numberButtons[9] = new JButton("<html><center>9<br>WXYZ</center></html>");
    numberButtons[0] = new JButton("<html><center>0<br>space</center></html>");

    poundButton = new JButton("#");
    starButton = new JButton("*");
    //add JButtons to buttons JPanel
    panel.add(topLeftButton);
    panel.add(topMiddleButton);
    panel.add(topRightButton);
    panel.add(numberButtons[1]);
    panel.add(numberButtons[2]);
    panel.add(numberButtons[3]);
    panel.add(numberButtons[4]);
    panel.add(numberButtons[5]);
    panel.add(numberButtons[6]);
    panel.add(numberButtons[7]);
    panel.add(numberButtons[8]);
    panel.add(numberButtons[9]);
    panel.add(starButton);
    panel.add(numberButtons[0]);
    panel.add(poundButton);
    //add Listener instance (inner class) to buttons
    topLeftButton.addActionListener(new Listener());
    topMiddleButton.addActionListener(new Listener());
    topRightButton.addActionListener(new Listener());
    //JButton[] array = new JButton[10];
    for (int i = 0; i < numberButtons.length; i++)
    {
        numberButtons[i].addActionListener(new Listener());
        numberButtons[i] = new JButton(String.valueOf(i));
    }
        starButton.addActionListener(new Listener());
        poundButton.addActionListener(new Listener());
    //add display and buttons to JFrame
    setLayout(new BorderLayout());
    add(display, BorderLayout.NORTH);
    add(panel, BorderLayout.CENTER);
}

private class Listener implements ActionListener
{

    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == topLeftButton)
        {
                if(lastPressTime == null)
                {
                    display.setText(ENTER_NUMBER_TEXT);
                }
                else
                {
                    topLeftButton.setEnabled(true);
                    lastCharacterIndex--;
                    lastPressed = lastPressTime.toString();
                }
        }
        else if(e.getSource() == topMiddleButton)
        {
            if(lastPressTime == null || lastCharacterIndex == 0)
            {
                display.setText(ENTER_NUMBER_TEXT);
            }
            else
            {
                display.setText(CALLING_DISPLAY_TEXT);
            }
        }
        else if(e.getSource() == topRightButton)
        {
            if(lastPressTime == null || lastCharacterIndex == 0)
            {
                display.setText(TEXT_DISPLAY_TEXT);
            }
            else
            {
                display.setText(CALLING_DISPLAY_TEXT);
            }
        }
        else
        {
            topLeftButton.setEnabled(true);
            if (e.getSource() instanceof JButton)
            {
                //String text = ((JButton) e.getSource()).getText();
                display.setText(lastPressed + " f" + numberButtons[lastCharacterIndex].getText());
            }
        }
        Date currentPress = new Date();

        long currentTime = currentPress.getTime();
        if(lastPressTime != null)
        {
            //long lastPressTime = lastPressTime.getTime();
            //subtract lastPressTime from currentPress time to find amount of time elapsed since last button pressed.
        }
        lastPressTime = currentPress;
        String buttonLetters = ""; // Parse Letter from button (e.g "abc").
        //update lastCharacterIndex.
        lastCharacterIndex++;
        lastCharacterIndex = lastCharacterIndex % buttonLetters.length();
    }
}

例如,如果我按下按钮2,而不是给我“2”,它会给我<html> <center> 2 ABC </ center> </ html>

因此,我需要帮助

  1. 拥有numberButtons,当按下时显示被推送的数字。
  2. 能够删除这些数字。

以下是样本运行的链接:https://www.youtube.com/watch?v=evmGWlMSqqg&feature=youtu.be

尝试启动视频20秒。

java user-interface event-handling jbutton actionlistener
2个回答
0
投票

要删除该号码,您可以使用labelname.setText(“”)


0
投票

在基本级别,您只需要与UI分开维护“数字”。这通常被称为“模型”。该模型独立于UI,允许模型根据应用程序的需要以任意数量的方式表示。

在您的情况下,您可以使用链接列表,数组或其他一些简单的基于顺序的列表,但最简单的可能是使用StringBuilder,因为它提供了您需要的功能(追加和删除),并且可以非常简单地制作String

因此,您需要做的第一件事是创建一个模型实例作为实例级别字段;

private StringBuilder numbers = new StringBuilder(10);

这将允许在类的实例中的任何位置访问缓冲区。

然后你需要更新模型......

else
{
    topLeftButton.setEnabled(true);
    if (e.getSource() instanceof JButton)
    {
        String text = numberButtons[lastCharacterIndex].getText();
        numbers.append(text);
    }
}

要删除最后一个字符,您只需使用类似...

if (numbers.length() > 0) {
    numbers.deleteCharAt(numbers.length() - 1);
}

然后,当您需要时,使用类似的东西更新UI ...

display.setText(numbers.toString());

现在,这只是基本概念,您需要将这些想法应用到您的代码库中

© www.soinside.com 2019 - 2024. All rights reserved.