У меня есть JDialog, в котором я хотел изменить компоненты (например, от TextField до JLabel), когда есть триггер (например, прослушиватель действий кнопки). Я попробовал перерисовать и повторить проверку. Но все равно не работает. Любая помощь будет высоко оценен.JDialog repaint не работает
Вот пример кода: JDialog имеет JButton и еще один JComponent (изначально JtextField). когда я нажимаю кнопку, текстовое поле должно быть заменено на метку.
package sample;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* @author mravindran
*
*/
public class JDialogRefresh extends JDialog {
JComponent c;
JPanel p;
JDialogRefresh() {
p = new JPanel();
JButton b = new JButton();
c = new JTextField();
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
c = new JLabel("Hi");
p.revalidate();
p.repaint();
getContentPane().validate();
getContentPane().repaint();
/* validate();
repaint();*/
}
});
c.setPreferredSize(new Dimension(50,20));
p.add(b);
p.add(c);
this.add(p);
}
public static void main(String[] args) {
JDialogRefresh dialog = new JDialogRefresh();
dialog.pack();
dialog.setVisible(true);
}
}
Вот ответ:
package sample;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* @author mravindran
*
*/
public class JDialogRefresh extends JDialog {
JComponent c;
JPanel p;
JDialogRefresh() {
p = new JPanel();
JButton b = new JButton();
c = new JTextField();
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
p.remove(c);
c = new JLabel("Hi");
p.add(c);
p.revalidate();
p.repaint();
getContentPane().validate();
getContentPane().repaint();
/* validate();
repaint();*/
}
});
c.setPreferredSize(new Dimension(50,20));
p.add(b);
p.add(c);
this.add(p);
}
public static void main(String[] args) {
JDialogRefresh dialog = new JDialogRefresh();
dialog.pack();
dialog.setVisible(true);
}
}
'revalidate' и' repaint' вместо – MadProgrammer
Я сделал ревизию и перерисовку на панель и диалог. но ничего не получилось – MMPgm
Конечно, это не сработает, так как вы снова не добавляете JLabel в графический интерфейс. –