Как добавить текст и удалить текст с помощью графического интерфейса в Java - PullRequest
0 голосов
/ 10 апреля 2019

Я создаю немой телефон (как старый традиционный телефон), и я использую программирование 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", это даст мне

2ABC

Поэтому мне нужна помощь с

  1. Наличие кнопки numberButtons при нажатии для отображения номеров, которые были нажаты.
  2. Уметь удалять эти числа.

Вот ссылка на пример прогона: https://www.youtube.com/watch?v=evmGWlMSqqg&feature=youtu.be

Попробуйте запустить видео через 20 секунд.

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

На базовом уровне вы просто хотите поддерживать «цифры» отдельно от пользовательского интерфейса.Это широко известно как «модель».Модель живет независимо от пользовательского интерфейса и позволяет представлять модель любым количеством возможных способов в зависимости от потребностей приложения.

В вашем случае вы можете использовать связанный список, массив или какой-либо другой простойпоследовательный список, но проще всего, вероятно, использовать 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);
}

Затем, когда вам нужно, вы обновляете интерфейсиспользуя что-то вроде ...

display.setText(numbers.toString());

Теперь, это всего лишь основные понятия, вам нужно взять идеи и применить их к своей кодовой базе

0 голосов
/ 10 апреля 2019

чтобы удалить номер, вы можете использовать labelname.setText ("")

...