Передача переменной с помощью метода в Java

Ниже приведен пример настройки ( https://github.com/mikeal/request/issues/894 ):

//...some stuff to get my proxy config (credentials, host and port)
var proxyUrl = "http://" + user + ":" + password + "@" + host + ":" + port;

var proxiedRequest = request.defaults({'proxy': proxyUrl});

proxiedRequest.get("http://foo.bar", function (err, resp, body) {
  ...
})

2
задан zAlweNy26 13 July 2018 в 18:01
поделиться

1 ответ

Вам не нужны эти внутренние петли, так как i - это все, что вам нужно. Вы можете легко вычислить строку и столбец из значения i, используя int division и int остаток

    int r = i / COLS;
    int c = i % COLS;

Например

public class Prova {
    private static final int ROWS = 6;
    private static final int COLS = 7;

    // ....

            lblCircles[i].addMouseListener(new MouseAdapter() {
                // better to use mousePressed, not mouseClicked
                public void mousePressed(MouseEvent e) {

                    // no magic numbers such as 42 please. 
                    for (int i = 0; i < lblCircles.length; i++) {
                        if (e.getSource() == lblCircles[i] && choose == 1) {
                            myLabelClicked(lblCircles[i], i);
                        }
                    }
                }
            });

и

public void myLabelClicked(JLabel label, int i) {
    int r = i / COLS;
    int c = i % COLS;
    if (n == 0 && "vuota".equals(label.getName())) {
        n = 1;
        label.setText("ok1");
        label.setForeground(Color.GREEN);
        label.setName("piena");
        tbl[r][c] = 1;
    } else {
        n = 0;
        label.setText("ok2");
        label.setForeground(Color.GREEN);
        label.setName("piena");
        tbl[r][c] = 2;
    }
    System.out.println("tbl[" + r + "][" + c + "] = " + tbl[r][c]);
}

Боковые проблемы:

  • Да, гораздо лучше использовать менеджеры макетов, а не setBounds, и поэтому ваш второй бит кода лучше
  • Избегайте магических чисел, таких как 42 и вместо этого используют свойства и константы.
  • В моем коде выше ROWS = 6 и COLS = 7

Мой MCVE:

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.*;

@SuppressWarnings("serial")
public class Prova2 extends JPanel {
    private static final int ROWS = 6;
    private static final int COLS = 7;
    private static final int LBL_EB = 25; // "eb" for empty border
    private static final int PNL_EB = 3;
    public static final Font BIG = new Font("Comic Sans MS", Font.BOLD, 18);
    private static final Color BACKGROUND = new Color(41, 41, 41);
    private static final String VUOTA = "vuota";
    private JLabel[] lblCircles = new JLabel[ROWS * COLS];
    private Integer[][] tbl = new Integer[ROWS][COLS];
    private int choose = 1, n = 0;

    public Prova2() {
        setBorder(BorderFactory.createEmptyBorder(PNL_EB, PNL_EB, PNL_EB, PNL_EB));
        setLayout(new GridLayout(ROWS, COLS));
        setBackground(BACKGROUND);
        for (int i = 0; i < lblCircles.length; i++) {
            lblCircles[i] = new JLabel("test");
            lblCircles[i].setForeground(Color.RED);
            lblCircles[i].setFont(BIG);
            lblCircles[i].setBorder(BorderFactory.createEmptyBorder(LBL_EB, LBL_EB, LBL_EB, LBL_EB));
            lblCircles[i].setName(VUOTA);
            lblCircles[i].addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    for (int i = 0; i < lblCircles.length; i++) {
                        if (e.getSource() == lblCircles[i] && choose == 1) {
                            myLabelClicked(lblCircles[i], i);
                        }
                    }
                }
            });
            add(lblCircles[i]);
        }
    }

    protected void myLabelClicked(JLabel label, int i) {
        int row = i / COLS;
        int col = i % COLS;
        if (!VUOTA.equals(label.getName())) {
            return;
        }
        if (n == 0) {
            n = 1;
            label.setText("ok1");
            tbl[row][col] = 1;
        } else {
            n = 0;
            label.setText("ok2");
            tbl[row][col] = 2;
        }
        label.setForeground(Color.GREEN);
        label.setName("piena");
        System.out.printf("tbl[%d][%d] = %d%n", row, col, tbl[row][col]);
    }

    private static void createAndShowGui() {
        Prova2 mainPanel = new Prova2();

        JFrame frame = new JFrame("Prova 2");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}
0
ответ дан Hovercraft Full Of Eels 17 August 2018 в 12:21
поделиться
  • 1
    О, вот где я был неправ. Большое вам спасибо, код работает правильно, как я хотел. – zAlweNy26 13 July 2018 в 18:23
  • 2
    @ zAlweNy26: добро пожаловать. Обратите внимание на изменения, внесенные в мой собственный MCVE, включая использование констант, чтобы сделать код более комментирующим. – Hovercraft Full Of Eels 13 July 2018 в 18:28
Другие вопросы по тегам:

Похожие вопросы: