Как сделать кнопку прокрутки по умолчанию разрешающей ввод нажмите? - PullRequest
1 голос
/ 27 марта 2020

Я написал программу для случайного выбора изображения и отображения его в окне при каждом нажатии кнопки. Теперь я пытаюсь выяснить, как сделать кнопку «Roll Dice» по умолчанию, разрешающую ввод, нажмите.

Драйвер:

public class MCobbM10A1 {

    static int SCREEN_WIDTH = 500;
    static int SCREEN_HEIGHT = 600;
    static WidgetPanel widget;
    static GraphicPanel myPanel;

    public static void main(String[] args) {
        JFrame myFrame = new JFrame("Dice Roller");
        JFrame.setDefaultLookAndFeelDecorated(true);
        myPanel = new GraphicPanel();
        myPanel.setBounds(0, 0, 500, 200);
        myFrame.add(myPanel);
        JPanel lastPanel = new JPanel();
        myFrame.add(lastPanel);
        widget = new WidgetPanel();
        widget.setBounds(0, 250, 500, 300);
        myFrame.add(widget);
        widget.rollButton.addActionListener((ActionEvent newRoll) -> {
            new MCobbM10A1().myNewRollButtonPressed();
        });
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.pack();
        myFrame.setVisible(true);
        myFrame.setBounds(0, 0, 500, 300);
    }
    private void myNewRollButtonPressed() {
        myPanel.newRoll();
    }
}

А вот WidgetPanel:

public class WidgetPanel extends JPanel {
    JButton rollButton;
        WidgetPanel() {
            this.setBackground(Color.WHITE);
            this.setLayout(new BorderLayout());
            rollButton = new JButton();
            rollButton.setBounds(350, 200, 100, 25);
            rollButton.setText("Roll Dice");
            this.add(rollButton);
            JLabel fixBug = new JLabel();
            this.add(fixBug);
        } 
}

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Не имеет отношения к вашему вопросу, но почему вы создаете новый объект для каждого броска?

        widget.rollButton.addActionListener((ActionEvent newRoll) -> {
            new MCobbM10A1().myNewRollButtonPressed(); // <--- new MCobbM10A1 object
        });
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.pack();
        myFrame.setVisible(true);
        myFrame.setBounds(0, 0, 500, 300);
    }
    private void myNewRollButtonPressed() {
        myPanel.newRoll();
    }

Почему бы просто не сделать это?

    widget.rollButton.addActionListener((ae) ->
            myPanel.newRoll());
0 голосов
/ 27 марта 2020

как сделать кнопку "Roll Dice" стандартной, разрешающей ввод, нажмите.

Вы назначаете кнопку по умолчанию для JRootPane вашего фрейма.

frame.getRootPane().setDefaultButton(…);

Один из способов сделать это:

@Override
public void addNotify()
{
    super.addNotify();

    JFrame frame = (JFrame)SwingUtilities.windowForComponent( rollButton );
    frame.getRootPane().setDefaultButton(rollButton);
}

Метод addNotify() вызывается при добавлении панели в фрейм.

...