[英]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);
}
});
}
}
您沒有可以監聽的事件會告訴您拖動事件何時開始。 您可以自己寫一個。 您將需要某種有狀態變量,可以在第一次接收到鼠標拖動事件時進行切換,然后將其用作后續鼠標拖動事件的防護。 您可以在釋放鼠標事件時重置有狀態變量。 請參見MouseEvent和MouseEventListener 。
至於您的其他問題-我不確定您要問什么。 您是否想知道如何從命令行獲取用戶提供的數據,或者試圖弄清楚提供后如何使用它們?
對於前者,使用命令行參數非常簡單。 對於后者,您所要做的就是編寫一個setter方法,該方法將驗證輸入並在調用方提供的值有效時覆蓋默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.