swing Java JPanel对象已更新,但更新在屏幕上不可见
我对GUI编程非常陌生,不知道如何更新对象并在屏幕上显示更改。我有一门数独课,它扩展了JPanel。我有一个JFrame,数独是其中的一部分。我有一个按钮,它调用函数openFile。以下是它的名称:
private void openFileActionPerformed(java.awt.event.ActionEvent evt) {
sudoku = FileManagement.openFile(this, sudoku);
}
数独对象有一个9x9网格,当我调试它时,新值就在网格中。但我不知道如何在屏幕上显示新值。我读了一些评论并尝试了数独。验证(),数独。重新绘制()或只是再次打包JFrame,但它不起作用。所以如果有人告诉我如何修复,我将不胜感激。如果我的解释不充分或不清楚,请告诉我在描述中还需要补充什么。谢谢
编辑-添加代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
public class Sample extends javax.swing.JFrame {
public Sample() {
initComponents();
}
private void initComponents() {
sudoku = new sudoku.Sudoku();
openFile = new javax.swing.JButton();
openFile.setText("Open");
openFile.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openFileActionPerformed(evt);
}
});
/*sorry for that part - automaticlly generated, don't know how to make it less*/
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(sudoku)
.addGroup(layout.createSequentialGroup()
.addComponent(openFile)))));
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(sudoku)
.addComponent(openFile)));
pack();
}
private void openFileActionPerformed(java.awt.event.ActionEvent evt) {
sudoku = openFile(this, sudoku);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Sample().setVisible(true);
}
});
}
private javax.swing.JButton openFile;
private sudoku.Sudoku sudoku;
public static Sudoku openFile(JFrame frame, Sudoku sudoku) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = fileChooser.showOpenDialog(frame);
if (result == JFileChooser.CANCEL_OPTION) {
return sudoku;
}
File fileName = fileChooser.getSelectedFile();
try (ObjectInputStream input = new ObjectInputStream(new FileInputStream(fileName))) {
sudoku = (Sudoku) input.readObject();
} catch (IOException | ClassNotFoundException ioException) {
System.out.println(ioException);
}
return sudoku;
}
}
# 1 楼答案
解决这个问题的一个快速方法是从
JFrame
中删除JPanel
,更改其值,然后将JPanel
重新添加到JFrame
。这可以在下面的例子中看到如果这不能解决问题,比如Andrew Thompson所说的,那么添加一个MCVE。这将使我们能够帮助解决您的确切问题