簡體   English   中英

命令行輸入

[英]Command line input

有什么方法可以只從拖動中獲得初始按動,因為現在當在同一正方形上拖動時,它可以在黑白之間切換。 另外,我正在嘗試從命令行獲取將構成網格的矩形的寬度和高度,如果用戶擰緊或未輸入任何內容,則默認將它們設置為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);
        }
    });
}
}

您沒有可以監聽的事件會告訴您拖動事件何時開始。 您可以自己寫一個。 您將需要某種有狀態變量,可以在第一次接收到鼠標拖動事件時進行切換,然后將其用作后續鼠標拖動事件的防護。 您可以在釋放鼠標事件時重置有狀態變量。 請參見MouseEventMouseEventListener

至於您的其他問題-我不確定您要問什么。 您是否想知道如何從命令行獲取用戶提供的數據,或者試圖弄清楚提供后如何使用它們?

對於前者,使用命令行參數非常簡單。 對於后者,您所要做的就是編寫一個setter方法,該方法將驗證輸入並在調用方提供的值有效時覆蓋默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM