Java-обновление Jpanel компонента - PullRequest
0 голосов
/ 17 февраля 2011

Я использую Custome jPanel в моем Guif Builder JFram Class A, проблема, с которой я сталкиваюсь, заключается в обновлении компонентов (Lable) в моем JPanel, когда я нажимаю кнопку в JFrame. В Gui Builder JFrame ClassA есть кнопка: он меняет цвет Jpl, а также удаляет все метки, но не обновляет новые метки.

private void btnShowActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:

            Random randomGenerator = new Random();
            for (int idx = 1; idx <= 10; ++idx) {
                q = randomGenerator.nextInt(100);
            }
            jpl1.removeAll();
            new Jpl().printMe(ClassA.q);
            jpl1.revalidate();
            jpl1.setBackground(Color.BLUE);
            jpl1.repaint();
}

вот класс Jpl, который используется в качестве обычного компонента в GuiBuilder JFrame Class A.

public class Jpl extends JPanel {

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


public void printMe(int q) {

    for (int i = 0; i <q; i++) {
        System.out.println(i+"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");
            }
        });
    }

}

1 Ответ

2 голосов
/ 17 февраля 2011

Вы вызываете printMe () для нового экземпляра Jpl, попробуйте это:

private void btnShowActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:

            Random randomGenerator = new Random();
            for (int idx = 1; idx <= 10; ++idx) {
                q = randomGenerator.nextInt(100);
            }
            jpl1.removeAll();
            jpl1.printMe(ClassA.q); // HERE - REMOVED new and using jpl1 instance
            jpl1.setBackground(Color.BLUE);
            jpl1.revalidate();
            jpl1.repaint();
}

Я не понимаю, почему вы циклически повторяете 10 раз для своего случайного числа. Будет сохранен только последний результат, возможно, вы хотели использовать q += randomGenerator.nextInt(100);. Кроме того, ClassA.q следует заменить на q, если это та же самая переменная.

...