Ввод командной строки - PullRequest
0 голосов
/ 22 марта 2019

Есть ли способ получить только начальное нажатие от перетаскивания, потому что сейчас оно продолжает переключаться между черным и белым при перетаскивании по одному и тому же квадрату.Кроме того, я пытаюсь получить из командной строки ширину и высоту прямоугольников, которые будут составлять сетку. Если пользователь испортит или ничего не введет, то они по умолчанию установлены на 50.Я попытался создать метод, потому что я действительно не знал, как поместить их в главное и затем использовать его в JPanel.

public class Clicky extends JFrame {

private static class Board extends JPanel {

    public int BRICK_WIDTH = 50;
    public int BRICK_HEIGHT = 50;
    public Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    public double width = screenSize.getWidth();
    public double height = screenSize.getHeight();
    public double bWidth;
    public double bHeight;
    private int COLS = (int) (width / bWidth);
    private int ROWS = (int) (height / bHeight);
    private Color CO = Color.BLACK;

    private boolean[][] isWhite = new boolean[COLS + 1][ROWS + 1];

    public Board() {


        System.out.println("WIdth:" + COLS + "Height:" + ROWS);
        setBackground(Color.BLACK);
        addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent e) {
                mx = e.getX();
                my = e.getY();
                System.out.printf("X: %d Y: %d ", mx, my);
                isWhite[(int) (mx / bWidth)][(int) (my
                        / bHeight)] = !isWhite[(int) (mx / bWidth)][(int) (my / bHeight)];
                repaint();
            }
        });

        addMouseMotionListener(new MouseMotionListener() {
            @Override
            public void mouseDragged(MouseEvent e) {
                mx = e.getX();
                my = e.getY();
                isWhite[(int) (mx / bWidth)][(int) (my
                        / bHeight)] = !isWhite[(int) (mx / bWidth)][(int) (my / bHeight)];
                int gridx = e.getX();
                int gridy = e.getY();
                System.out.println(gridx);
            }

            @Override
            public void mouseMoved(MouseEvent e) {

            }
        });
    }

    @Override
    protected void paintComponent(Graphics g,String[] args ) {
        super.paintComponent(g);

        drawBricks(g);
        getValues(args);
    }

    private double x;
    private double y;

    public void getValues(String[] args){
         try
         {
             bWidth = Integer.valueOf(args[0]);
         }

         catch (IndexOutOfBoundsException | NumberFormatException ex)
         {
    // If the argument was bad then use the default.
         bWidth = BRICK_WIDTH;
         }

         try
         {
             bHeight = Integer.valueOf(args[1]);
        }
        catch (IndexOutOfBoundsException | NumberFormatException ex)
        {
    // If the argument was bad then use the default.
         bHeight = BRICK_HEIGHT;
        }
}
       private void drawBricks(Graphics g) {

        Graphics2D brick = (Graphics2D) g.create();
        x = 0;
        y = 0;
        for (int j = 0; j <= ROWS; j++) {
            for (int a = 0; a <= COLS; a++) {
                if (isWhite[a][j]) {
                    brick.setColor(Color.WHITE);
                } else {
                    brick.setColor(Color.BLACK);
                }
                Rectangle2D.Double rect = new Rectangle2D.Double(x, y, bWidth, bHeight);
                brick.fill(rect);

                brick.setColor(Color.gray);
                brick.draw(rect);
                x += bWidth;
            }
            repaint();
            x = 0;
            y += bHeight;
        }

    }

    public int mx = -100;
    public int my = -100;
}

public Clicky() {

    setDefaultCloseOperation(EXIT_ON_CLOSE); // mai bine cu exit on close
    setSize(800, 820);
    add(new Board());
}

public static void main(String[] args) {

    java.awt.EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            new Clicky().setVisible(true);
        }
    });
}
}

1 Ответ

1 голос
/ 22 марта 2019

Нет события, которое вы можете прослушать, которое сообщило бы вам, когда начинается событие перетаскивания.Вы можете написать один самостоятельно.Вам понадобится какая-то переменная с состоянием, которую можно переключать при первом получении события перетаскивания мышью, а затем использовать в качестве защиты для последующих событий перетаскивания мышью.Вы можете сбросить переменную с сохранением состояния при отпускании мыши.См. MouseEvent и MouseEventListener .

Что касается вашего другого вопроса - я не совсем уверен, что вы спрашиваете.Вы задаетесь вопросом, как получить предоставленные пользователем данные из командной строки или пытаетесь выяснить, как использовать их после их предоставления?

В первом случае все просто, с аргументами командной строки .Для последнего все, что вам нужно сделать, это написать метод установки, который проверяет входные данные и переопределяет значения по умолчанию, если предоставленные вызывающим значением допустимы.

...