こんにちは、更新ボタンを押した後に JPanel を再描画するのに苦労しています。私の実際のアプリでは、モデルのファイルのリストを表す Jlabels があり、更新ボタンが押されるたびに、Jpanel に表示される Jlabels のリストがそれに応じて更新され、私はそれを行うのに非常に苦労したので、ここでは単純でクリーンでコンパイル可能な例を作成しました。更新ボタンが押された後、JPanel がクリーンアップされるようにします (単純にするため)。そのため、更新が EDT で呼び出されることを確認し、変更された Jpanel (panConf) で手動で無効化を行い、最高のコンプである JFrame に再検証を呼び出しました。何も機能しなかったので、再描画を追加しましたが、それも機能しませんでした。私を手伝ってくれますか ?
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class PanRepaint extends JFrame {
private JPanel pan1;
private JPanel mainPanel;
private JPanel panConf;
private JFrame dis;
public PanRepaint() {
JLabel label1 = new JLabel("ZAZAZA");
JLabel label2 = new JLabel("Label 2");
JButton btn = new JButton("Update");
dis = this;
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
panConf = new JPanel();
panConf.invalidate();
//dis.invalidate();
dis.validate();
dis.repaint();
}
});
}
});
panConf = new JPanel();
pan1 = new JPanel();
mainPanel = new JPanel();
panConf.add(label1);
panConf.add(label2);
pan1.add(btn);
mainPanel.add(panConf);
mainPanel.add(pan1);
setContentPane(mainPanel);
this.setSize(400, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
PanRepaint pr = new PanRepaint();
}
}