Java-приложение для клавиатуры компилируется, но ничего не показывает

#java

#java

Вопрос:

Я не уверен, туда ли я поместил свою основную пустоту или что? Я добился компиляции программы без каких-либо ошибок, но когда я запускаю приложение в TextPad, оно просто сообщает мне «нажать любую клавишу, чтобы продолжить» …. затем ничего не делает

 import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.awt.Graphics;
import javax.swing.JOptionPane;
import javax.swing.JApplet;
import java.awt.event.*;

public class telephoneKeypad extends JApplet
{
    public void init()
          {
              this.setLayout(new GridLayout(4,3));
            this.setSize(new Dimension(175, 231));


            new telephoneKeypad().setVisible(true);

        }


    public void telephoneKeypad ()
    {
        Panel pnlKeyPad = new Panel();
          GridLayout gridLayout1 = new GridLayout();
          Button btnZero = new Button();
          Button btnOne = new Button();
          Button btnTwo = new Button();
          Button btnThree = new Button();
        Button btnFour = new Button();
          Button btnFive = new Button();
          Button btnSix = new Button();
          Button btnSeven = new Button();
          Button btnEight = new Button();
          Button btnNine = new Button();
          Button btnStar = new Button();
          Button btnHash = new Button();

        TextField tfNumber = new TextField();
          Button btnDial = new Button();
          BorderLayout borderLayout1 = new BorderLayout();
          Panel pnlNumberEntry = new Panel();
          FlowLayout flowLayout1 = new FlowLayout();





            btnOne.setLabel("1");
            btnTwo.setLabel("2");
            btnThree.setLabel("3");
            btnFour.setLabel("4");
            btnFive.setLabel("5");
            btnSix.setLabel("6");
            btnSeven.setLabel("7");
            btnEight.setLabel("8");
            btnNine.setLabel("9");
            btnStar.setLabel("*");
            btnZero.setLabel("0");
            btnHash.setLabel("#");
            btnDial.setLabel("Dial");

            pnlNumberEntry.setLayout(flowLayout1);
            pnlKeyPad.setLayout(gridLayout1);
            this.setLayout(borderLayout1);
            this.add(pnlNumberEntry, BorderLayout.NORTH);
            pnlNumberEntry.add(tfNumber, null);
            pnlNumberEntry.add(btnDial, null);
            this.add(pnlKeyPad, BorderLayout.CENTER);
            pnlKeyPad.add(btnOne, null);
            pnlKeyPad.add(btnTwo, null);
            pnlKeyPad.add(btnThree, null);
            pnlKeyPad.add(btnFour, null);
            pnlKeyPad.add(btnFive, null);
            pnlKeyPad.add(btnSix, null);
            pnlKeyPad.add(btnSeven, null);
            pnlKeyPad.add(btnEight, null);
            pnlKeyPad.add(btnNine, null);
            pnlKeyPad.add(btnStar, null);
            pnlKeyPad.add(btnZero, null);
            pnlKeyPad.add(btnHash, null);
        }

            public static void main(String args[])
                {
                telephoneKeypad kpad = new telephoneKeypad();
                kpad.setBounds(500, 500, 500, 500);
                kpad.setVisible(true);
    }
 }
  

Ответ №1:

Ваше приложение должно либо быть апплетом (путем расширения JApplet ) , либо приложением (путем предоставления public static void main(String[]) метода в качестве точки входа). Очень редко встречается и то, и другое.

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

Комментарии:

1. «Очень редко бывает и то, и другое». Обычно я буду кодировать гибридный апплет / приложение — даже если код предназначен только для запуска как апплет. Это может ускорить разработку.

2. @Andrew: Вероятно, мне следовало сформулировать это по-другому. По моему опыту, если создается гибридное приложение, его следует компоновать по-другому.

Ответ №2:

Измените часть extends JApplet на extends javax.swing.JFrame , затем удалите возвращаемый тип из метода public void telephoneKeypad () (т. е. public telephoneKeypad () он станет конструктором), метод init() в любом случае никогда не вызывается, поэтому вы можете просто удалить его. Теперь это должно сработать.

Ответ №3:

Попробуйте этот исходный код. Внимательно посмотрите на комментарии.

 //<applet code='TelephoneKeypad' width='400' height='400'></applet>
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.*;

// class names should be EachWordUpperCase
public class TelephoneKeypad extends JApplet {

    public void init() {
        // an applet's size is set by the HTML
        //this.setSize(new Dimension(175, 231));

        Runnable r = new Runnable() {
            public void run() {
                TelephoneKeypadPanel kpad = new TelephoneKeypadPanel();

                setContentPane(kpad.getKeyPad());
                validate();
            }
        };
        SwingUtilities.invokeLater(r);
    }


    public static void main(String args[]) {
        Runnable r = new Runnable() {
            public void run() {
                JFrame f = new JFrame("Telephone KeyPad");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                TelephoneKeypadPanel kpad = new TelephoneKeypadPanel();
                // use layouts.
                // kpad.setBounds(500, 500, 500, 500);

                f.setContentPane(kpad.getKeyPad());
                f.pack();
                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

class TelephoneKeypadPanel {

    private JPanel pnlKeyPad;

    TelephoneKeypadPanel () {
        pnlKeyPad = new JPanel(new BorderLayout(5,5));

        JButton btnZero = new JButton("0");
        JButton btnOne = new JButton("1");
        JButton btnTwo = new JButton("2");
        JButton btnThree = new JButton("3");
        JButton btnFour = new JButton("4");
        JButton btnFive = new JButton("5");
        JButton btnSix = new JButton("6");
        JButton btnSeven = new JButton("7");
        JButton btnEight = new JButton("8");
        JButton btnNine = new JButton("9");
        JButton btnStar = new JButton("*");
        JButton btnHash = new JButton("#");
        JButton btnDial = new JButton("Dial");

        JTextField tfNumber = new JTextField(15);

        JPanel pnlNumberEntry = new JPanel();

        JPanel keys = new JPanel(new GridLayout(4,4,10,10));

        pnlKeyPad.add(pnlNumberEntry, BorderLayout.NORTH);
        // what is with all the 'null' layout constraints?!?
        pnlNumberEntry.add(tfNumber);

        pnlKeyPad.add(keys, BorderLayout.CENTER);

        pnlKeyPad.add(btnDial, BorderLayout.SOUTH);
        keys.add(btnOne);
        keys.add(btnTwo);
        keys.add(btnThree);
        keys.add(btnFour);
        keys.add(btnFive);
        keys.add(btnSix);
        keys.add(btnSeven);
        keys.add(btnEight);
        keys.add(btnNine);
        keys.add(btnStar);
        keys.add(btnZero);
        keys.add(btnHash);
    }

    public JPanel getKeyPad() {
        return pnlKeyPad;
    }
}
  

Для компиляции / запуска

 prompt> javac TelephoneKeypad.java
prompt> appletviewer TelephoneKeypad.java
prompt> java TelephoneKeypad
  

Не

  1. Смешайте Swing с AWT
  2. Игнорируйте предупреждения об устаревании.
  3. Предположим, вы можете создать программу, скопировав / вставив куски кода, которые вы не понимаете.
  4. Используйте непоследовательный отступ / заключение кода в квадратные скобки.

Выполнить

  1. Создайте графический интерфейс на EDT (используя Runnable / SwingUtilities.invokeLater() ).
  2. Продолжить публикацию SSCCEs
  3. Продолжайте использовать форматирование кода на форуме.
  4. Поднимите этот ‘accept rate’.