0

正如您从我的代码中看到的那样,我在这里完全错过了一个完整的概念。我的目标是让用户输入:

Jbutton 文本字段:文本方向和助记符

我将该信息传递给我的 Button 类,该类检查错误并返回一个已定义的按钮。

然后根据用户规范使用所述按钮填充 JFrame。

BASIC,显然是一个课程问题,但我在这里无能为力。这是我第一次寻求帮助,所以请放轻松。

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


/**
 * This class will create a button using the Button class and with user input to define the instance
 * of the Button Class.
 * 
 */
public class CreateButton extends JPanel
{
    // instance variables 
    private static String userIn; // user input
    private static Button userButton; // button to be manipulated
    public static JButton createdButton; // finished button



    /**
     * Contructor for the CreateButton class.
     */
    public static void main (String [] args)
    {

            System.out.println("\nThis program will create a button with some input for you.");
            System.out.println("What would you like to call this button?");

            userIn = StringIn.get();

            userButton = new Button();
            userButton.buttonText(userIn);

            System.out.println("\nYou can orient your text on the button in the vertical and");
            System.out.println("horizontal axis. We will start with the vertical. Where would you like");
            System.out.println("the text, on the top, center, or bottom?");

            userIn = StringIn.get();

            String vertical = userIn;

            System.out.println("\nNext let's select the horizontal alignment. Would you like the text");
            System.out.println("aligned to the left, center, or right?");

            userIn = StringIn.get();

            String horizontal = userIn;

            userButton.textPosition(vertical,horizontal);

            System.out.println("\nFinally let's add a mnemonic or hotkey to the button. Pick a letter");
            System.out.println("from a-z on the keyboard and you can activate the button by pushing");
            System.out.println("ALT + your letter of choice. Please enter your letter:");

            userIn = StringIn.get();

            userButton.buttonMnemomic(userIn);

            System.out.println("\nGreat let's create and see this button.");


            javax.swing.SwingUtilities.invokeLater(new Runnable() 
            {
                public void run() 
                {
                   createAndShowGUI();
                }
            }); 

    }

     private static void createAndShowGUI() 
    {

        //Create and set up the window.
        JFrame frame = new JFrame("Create a Button");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        CreateButton newContentPane =  new CreateButton();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);


        //Display the window.
        frame.pack();
        frame.setVisible(true);

    }
}

我的按钮错误检查器代码如下:

import javax.swing.AbstractButton;
import javax.swing.JButton;


/**
 * This class will demonstrate the use of a button.
 * 
 */
public class Button                        
{
    // instance variables 
    protected JButton myButton; // button to be created and manipulated
    private String myButtonText; // text on the button
    private String myButtonVerticalTextPosition; 
    private String myButtonHorizontalTextPosition;
    private String myButtonMnemonic; // hotkey for the button

    /**
     * Constructor for objects of class Button
     */
    public Button()
    {

    }

    /**
     *Set button text. String input.
     */
    public void buttonText(String textIn)
    {
        myButtonText = textIn;
    }

    /**
     *Set button text position. String input for vertical (top, center, bottom) and horizontal
     *(left, center, right).
     */
    public void textPosition(String verticalIn, String horizontalIn)
    {
        myButtonVerticalTextPosition = verticalIn;

        boolean validInput = false;

        do
        {
            if  ((myButtonVerticalTextPosition.compareToIgnoreCase("top") == 0)||  
                 (myButtonVerticalTextPosition.compareToIgnoreCase("centre") == 0) ||
                 (myButtonVerticalTextPosition.compareToIgnoreCase("center") == 0) ||
                 (myButtonVerticalTextPosition.compareToIgnoreCase("bottom") == 0))
            {

                validInput = true;
            } else
            {

               System.out.println("\nPlease enter top, center, or bottom for vertical position:");
               myButtonVerticalTextPosition = StringIn.get();
            } 
        } while (validInput == false);

        myButtonHorizontalTextPosition = horizontalIn;

        validInput = false;

        do
        {
            if  ((myButtonHorizontalTextPosition.compareToIgnoreCase("left") == 0) ||  
                 (myButtonHorizontalTextPosition.compareToIgnoreCase("centre") == 0) ||
                 (myButtonHorizontalTextPosition.compareToIgnoreCase("center") == 0) ||
                 (myButtonHorizontalTextPosition.compareToIgnoreCase("right") == 0))
            {

                validInput = true;
            } else 
            {

                System.out.println("\nPlease enter left, center, or right for horizontal position:");
                myButtonHorizontalTextPosition = StringIn.get();
            } 
        } while (validInput == false);
    }

    /**
     *Set button mnemomic. String input for mnemomic [a-z].
     */
    public void buttonMnemomic(String mnemomicIn)
    {
        myButtonMnemonic = mnemomicIn;
        boolean validInput = false;

        do
        {
            if  (myButtonMnemonic.length() > 1)
            {
                System.out.println("\nPlease enter a letter from a-z: ");
                myButtonMnemonic = StringIn.get();
            } else if (!myButtonMnemonic.matches("^[a-zA-Z]+$"))
            {
                System.out.println("\nPlease enter a letter from a-z: ");
                myButtonMnemonic = StringIn.get();
            } else if ((myButtonMnemonic.length() == 1) && 
                       (myButtonMnemonic.matches("^[a-zA-Z]+$")))
            {
                validInput = true;
            }
        } while (validInput == false);
    }

    /**
     *Create button. Void method to create the button to the variables provided.
     */
    public void createButton()
    {
        // create new button

        myButton = new JButton(myButtonText);

        // set text position

        switch (myButtonVerticalTextPosition)
        {
            case "top":
                myButton.setVerticalTextPosition(AbstractButton.TOP);
                break;
            case "centre":
                myButton.setVerticalTextPosition(AbstractButton.CENTER);
                break;
            case "center":
                myButton.setVerticalTextPosition(AbstractButton.CENTER);
                break;
            case "bottom":
                myButton.setVerticalTextPosition(AbstractButton.BOTTOM);
                break;
            default:
                System.err.format("%n%s is an invalid entry.", myButtonVerticalTextPosition);
                break;
        }

        switch (myButtonHorizontalTextPosition)
        {
            case "left":
                myButton.setHorizontalTextPosition(AbstractButton.LEADING);
                break;
            case "centre":
                myButton.setHorizontalTextPosition(AbstractButton.CENTER);
                break;
            case "center":
                myButton.setHorizontalTextPosition(AbstractButton.CENTER);
                break;
            case "right":
                myButton.setHorizontalTextPosition(AbstractButton.TRAILING);
                break;
            default:
                System.err.format("%n%s is an invalid entry.", myButtonVerticalTextPosition);
                break;
        }

        // set button mnemonic

        StringBuilder hotKey = new StringBuilder("KeyEvent.VK_");
        hotKey.append(myButtonMnemonic.toUpperCase());
        myButton.setMnemonic(hotKey.charAt(0));

        // set tool tip text

        myButton.setToolTipText("Push the button. You know you want to.");
    }

    /**
     *Returns a JButton for the button type.
     */
    public JButton returnButton()
    {
        return myButton;
    }
}

这一切都适用于您添加“createdButton”的部分。如果我将其设为默认按钮,它会通过动作并放置默认按钮。

仅供参考,这是我的 StringIn 代码:

import java.util.Scanner;
import java.io.IOException;

/**
 * This class will allow the user to type in string from the console.
 * 
 */

public class StringIn 
{
    // instance variables 
    private static String userIn;

    public static String get() 
    {

        try (Scanner in = new Scanner(System.in))
        {
            userIn = new String(in.nextLine()); // Read the string from console.
        }
        return userIn;

    }
}
4

1 回答 1

0

对于 StringIn 类,只需执行以下操作:

    import java.util.Scanner;


    public class StringIn 
    {
        // instance variables 
        private static Scanner scanner = new Scanner(System.in);

        public static String get(){
            return scanner.nextLine();
        }
    }

编辑2:

好的,所以我将您的代码复制到我的 IDE 中,我得到的错误是源自您的 StringIn 类的错误。(我实际上不记得了,但这并不重要。)

您的 StringIn 类应该类似于上面的示例。

对于您的 createAndShowGUI() 函数:

    private static void createAndShowGUI() 
    {

        //Create and set up the window.
        JFrame frame = new JFrame("Create a Button");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane. ( Why were you even doing this? )

        frame.add(createdButton); //( To display the actual button you need to
        //add it to the frame)

        //Display the window.
        frame.pack();
        frame.setVisible(true);

    }

就这样吧^

我无法让助记词相关的东西正常工作,我不想花太多时间在上面,所以我把它们删除了。方向的东西也不起作用。

把它放在 main(String args[]) 的底部

    createdButton = userButton.createButton(); // Make createButton() return Button;

除了这部分之外,您的代码中的任何地方都不需要 JButton:

    public class Button extends JButton
    // And of course the import statement...

您可以使用Button.TOP代替AbstractButton.TOPwhich 将为您摆脱导入语句。

于 2012-08-26T08:16:31.123 回答