你好,谢谢你花时间处理我的问题。首先让我向你介绍我的虚拟/培训项目。下面列出的类应该代表MVC模型(模型、视图、控制器)之后的程序。运行主类时,会打开FileChooser,从中可以选择. csv-File,其中包含保存为String[][]的信息。这个String[][]然后在视图类中可视化为JTable。这个JTable是带有BorderLayout的JFrame中的JPanel的一部分。中心。现在的问题,为什么不会我的JTable调整大小正确,如果我重新调整JFrame?我在网上搜索,甚至this.table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
根本不会影响调整大小。我希望你能以某种方式帮助我。谢谢!
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
/**
* This class is responsible for the actual data being "processed".
* It saves the Strings out of a File into a String[][] and further more updates its content,
* if changed by the View-Class.
*
* @author CodeScrub
* @version 2022-01-13
*/
public class Model {
private File selectedFile;
private String[][] dataSetTotal;
private ArrayList<String> dataSetList;
private ArrayList<String> tableDatasetList;
public Model() {
dataSetList = new ArrayList<String>();
tableDatasetList = new ArrayList<String>();
}
public void evaluateData() {
try {
Scanner scanner = new Scanner(this.selectedFile);
while(scanner.hasNextLine()) {
String data = scanner.nextLine();
dataSetList.add(data);
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
this.dataSetTotal = new String[dataSetList.size()][3];
for(String info : dataSetList) {
String[] dataSetSeperate = info.split(";");
for(int i = 0; i < dataSetSeperate.length; i++) {
dataSetTotal[dataSetList.indexOf(info)][i] = dataSetSeperate[i];
}
}
}
public void setSelectedFile(File selectedFile) {
this.selectedFile = selectedFile;
}
public File getSelectedFile() {
return this.selectedFile;
}
public String[][] getDataSetTotal(){
return this.dataSetTotal;
}
public void updateData(String[][] tableContent) {
for(int i = 0; i < tableContent.length; i++) {
String dataSetSeperate = "";
for(int j = 0; j < tableContent[i].length; j++) {
if(j < 2) {
dataSetSeperate = dataSetSeperate + tableContent[i][j] + ";";
}else {
dataSetSeperate = dataSetSeperate + tableContent[i][j];
}
}
this.tableDatasetList.add(dataSetSeperate);
}
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(this.selectedFile));
for(String info : this.tableDatasetList){
writer.write(info + "\n");
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
this.tableDatasetList = new ArrayList<String>();
}
}
import java.awt.Dimension;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
* This class visualizes the processed data inside a JFrame.
* The data sets are visualized as a JTable.
*
* @author CodeScrub
* @version 2022-01-13
*/
public class View extends JFrame{
private static final long serialVersionUID = 1L;
private JFileChooser chooser;
private FileNameExtensionFilter filter;
private JLabel firstName;
private JLabel lastName;
private JLabel socialSecurityNumber;
private JButton buttonSafeChanges;
private JScrollPane scrollPane;
private JTable table;
private JPanel centerPanel;
private Controller controller;
public View(Controller controller) {
this.controller = controller;
init();
}
private void init() {
this.chooser = new JFileChooser();
this.filter = new FileNameExtensionFilter(
"CSV Files", "csv");
this.chooser.setFileFilter(filter);
this.chooser.setPreferredSize(new Dimension(800,500));
int returnVal = chooser.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION) {
this.controller.updateData(chooser.getSelectedFile());
this.controller.evaluateData();
this.firstName = new JLabel("First Name");
this.lastName = new JLabel("Last Name");
this.socialSecurityNumber = new JLabel("Social Security Number");
this.centerPanel = new JPanel(new BorderLayout());
String[] title = {firstName.getText() , lastName.getText() , socialSecurityNumber.getText()};
this.table = new JTable(this.controller.getDataSetTotal(), title);
this.table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
this.centerPanel.add(table, BorderLayout.CENTER);
this.scrollPane = new JScrollPane(this.table);
this.centerPanel.add(scrollPane, BorderLayout.EAST);
this.buttonSafeChanges = new JButton("Safe Changes");
this.buttonSafeChanges.addActionListener(controller);
this.centerPanel.add(table.getTableHeader(), BorderLayout.NORTH);
this.add(centerPanel,BorderLayout.CENTER);
this.add(buttonSafeChanges, BorderLayout.SOUTH);
this.setTitle("MVC");
this.setSize(475,350);
this.setMinimumSize(new Dimension(475,350));
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
getTableContent();
}else {
System.exit(0);
}
}
public JButton getButtonSafeChanges() {
return this.buttonSafeChanges;
}
public String[][] getTableContent() {
String[][] tableContent;
tableContent = new String[this.table.getRowCount()][this.table.getColumnCount()];
for(int i = 0; i < table.getRowCount(); i++) {
for(int j = 0; j < table.getColumnCount(); j++) {
tableContent[i][j] = table.getValueAt(i,j).toString();
}
}
return tableContent;
}
}
import java.io.File;
/**
* This class works as an interface between the view- and model-class
* and also handles the action performed after the button press "Safe Changes".
*
* @author CodeScrub
* @version 2022-01-13
*/
public class Controller implements ActionListener{
private View view;
private Model model;
public Controller() {
this.model = new Model();
this.view = new View(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == this.view.getButtonSafeChanges()) {
this.model.updateData(this.view.getTableContent());
}
}
public void updateData(File selectedFile) {
this.model.setSelectedFile(selectedFile);
}
public File getSelectedFile() {
return this.model.getSelectedFile();
}
public void evaluateData() {
this.model.evaluateData();
}
public String[][] getDataSetTotal(){
return this.model.getDataSetTotal();
}
}
public class MVC_Testclass {
public static void main(String[] args) {
Controller controller = new Controller();
}
}
基本上,当您为JTable使用JScrollPane容器时,只需在中心面板中添加
滚动窗格
,并确保将其添加到中心
。下面解决了代码中的问题。
this.table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
//this.centerPanel.add(table, BorderLayout.CENTER);
this.scrollPane = new JScrollPane(this.table);
this.centerPanel.add(scrollPane, BorderLayout.CENTER);
编辑:它现在可以工作了,我用画布扩展了这个类,将它的大小设置为宽度和高度,然后将它添加到JFrame,然后打包。这管用!但我认为造成这种情况的原因不是尺寸大小,而是我呈现它的方式,我从JFrame中获得了bufferStrategy,而不是画布,这不是应该的方式。
一些修补和我发现新的卷没有BIOS引导分区。因此,我使用gdisk创建了一个MBR,并将MBR从原始卷(它可以工作,我可以使用它启动实例)复制到新卷。现在该实例没有终止,但我无法ssh到新启动的实例中。 发生这种情况背后的原因可能是什么?我如何(从日志/AWS控制台等)获得更多关于为什么会发生这种情况的信息?
问题内容: 我在Java中使用Apache POI创建一个Excel文件。我填写了数据,然后尝试自动调整每列的大小,但是大小总是错误的(我 认为是 一致的)。前两行始终(?)完全折叠。当我在excel中自动调整列的大小时,它可以完美运行。 (我相信)没有空白单元被写入,并且调整大小是我要做的 最后一 件事。 这是相关的代码: 这是一个精简的版本,没有错误处理等。 我知道那里有一些类似的问题,但是其
问题内容: 所以我已经在Java编程学了一个学期左右的时间,而且我遇到了几次这个问题,最后才开始提出问题。 如果我做一个然后设置大小,例如。帧实际上并不长。据我所知,它实际上更长。另外,如果您将垂直尺寸设置得非常小(低于30),则框架甚至不会显示,只有操作系统顶部的窗口栏和框架才会变大,直到您将值超过30(这样看起来与)相同。为什么会这样,修复起来并不难,但是很奇怪,我很好奇为什么会这样? 如果您
问题内容: 我正在做一个游戏,但是每当我运行第二个jFrame时,我都必须调整它的大小才能获得第二个jFrame的正确大小,有人知道为什么吗? 这是第一个jFrame类中的方法,它将打开第二个类: 这是第二个jFrame类,我必须重新调整它的大小才能正确显示山雀: 问题答案: 我读得很快,正在寻找一种特定的方法。 该方法是: JFrame中的此方法可能非常有用,但也很难处理,您需要非常了解如何设置
我正在使用vscode,eslint正在运行,但它在同一项目中的其他文件中找不到某些文件中的错误。 有什么方法可以调试这个吗?像一个更详细输出的选项,它会告诉我在vscode中运行时每个文件的配置在哪里?