повторно проверить JPanel в GUI bUilder - PullRequest
0 голосов
/ 10 февраля 2011

Я становлюсь смелее перекрашивать JPanel в Gui Builder, может любое тело мне поможет, пожалуйста. вот основной класс, который генерирует случайные числа в своем конструкторе

public class Main {
public static int q;
public Main(){

     Random randomGenerator = new Random();
            for (int idx = 1; idx <= 10; ++idx) {
                q = randomGenerator.nextInt(100);
            }
}

здесь - событие нажатия кнопки в классе A, включающее JPanel в качестве пользовательского кода

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    new Main();
    Jpl jpl=new Jpl();   

}

Вот класс, который добавляется в качестве обычного компонента к классу A

public class Jpl extends JPanel {

public Jpl() {
    printMe(Main.q);
}


public int printMe(int q) {
        removeAll();
    for (int i = 0; i <q; i++) {
        System.out.println("rinting lable");
        String htmlLabel = "<html><font color=\"#A01070\">" + i + " New Lable </font></html>";
        JLabel lbl = new JLabel(htmlLabel);
        setLayout(new GridLayout(0, 1));
        add(lbl, Jpl.RIGHT_ALIGNMENT);
        lbl.setForeground(Color.BLUE);
        Border border = BorderFactory.createLineBorder(Color.lightGray);
        lbl.setBorder(border);
        lbl.add(new JSeparator(SwingConstants.HORIZONTAL));

        lbl.addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent e) {
                JLabel label = (JLabel) e.getSource();
                JOptionPane.showMessageDialog(null, "You Slected");
                System.out.println(label.getText() + "NO AKKA is Selected");
            }
        });
    }

    revalidate();
    repaint();
    return 1;

}

Ответы [ 3 ]

1 голос
/ 10 февраля 2011

Не понятно, о чем вы спрашиваете, поэтому я просто собираюсь оставлять комментарии о проблемах в вашем коде.

printMe() возвращает int, но это всегда одно и то же значение,так что это не имеет смысла.Просто сделайте метод void.

String htmlLabel = "New Label+ i"; Это всегда будет производить одну и ту же строку и не даст вам значение i.Вместо этого вы хотите String htmlLabel = "New Label" + i;

Вы ничего не делаете с JLabel, которые вы делаете в цикле, поэтому на каждый объект больше не будет ссылаться после окончания текущей итерации.В продолжение этого, ваш MouseListener никогда не сработает, потому что метка, к которой вы его добавляете, никогда не появится в графическом интерфейсе.

1 голос
/ 10 февраля 2011

В дополнение к проблемам, упомянутым другими:

Вы создаете ярлыки, но не добавляете их в JPanel. Попробуйте это:

JLabel lbl = new JLabel(htmlLabel);
this.add(lbl);
1 голос
/ 10 февраля 2011

Одна проблема: в вашем коде ActionListener вы создаете новый объект JPanel (или Jpl):

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    Jpl jpl=new Jpl();
    int a= jpl.printMe(4);
}

, но абсолютно невозможно, чтобы это был объект Jpl, отображаемый в вашем графическом интерфейсе.Да, это объект того же класса, но это совершенно новый, отличный и отличный от отображаемого объекта, и поэтому вызов метода для него не повлияет на отображаемый объект Jpl.Решение состоит в том, чтобы вызывать ваши методы только для отображаемого объекта.Я не могу сказать вам, как получить ссылку на этот объект, так как мы не имеем отношения к остальной части вашего кода, где вы его отображаете.

Другая проблема в том, что вы не задали вопрос в этом посте,поэтому я понятия не имею, поможет ли мое предложение вашей основной проблеме (но я знаю, что оно решит проблему ).Поэтому я предлагаю вам задать правильный вопрос, чтобы мы могли лучше понять проблемы, и вам, вероятно, потребуется опубликовать больше кода.

...