Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当框架最大化时,滚动窗格消失_Java_Swing_Jscrollpane_Jbutton_Actionlistener - Fatal编程技术网

Java 当框架最大化时,滚动窗格消失

Java 当框架最大化时,滚动窗格消失,java,swing,jscrollpane,jbutton,actionlistener,Java,Swing,Jscrollpane,Jbutton,Actionlistener,我的问题是 JFrame ActualFrame = new JFrame("Actual frame"); JScrollPane pane = new JScrollPane(new JTable(data, columns)); ActualFrame.add(pane); ActualFrame.add(PrintPreviewBtn); PrintPreviewBtn.addActionListener(new ActionListener() { publ

我的问题是

JFrame ActualFrame = new JFrame("Actual frame");
JScrollPane pane = new JScrollPane(new JTable(data, columns));
ActualFrame.add(pane);
ActualFrame.add(PrintPreviewBtn);

PrintPreviewBtn.addActionListener(new ActionListener() {            
 public void actionPerformed(ActionEvent e) {
   JFrame PreviewFrame = new JFrame("Preview");
   PreviewFrame.add(pane, BorderLayout.CENTER);
}
当我运行程序时,一切似乎都很好,但当我按下“打印预览”按钮时,预览框会显示出来,当我最大化或调整实际框的大小时,表格就会消失

注:
我正在将该窗格添加到预览框中,以显示它,就好像它是所显示表格的预览一样……是否有任何其他打印预览方法

对于打印,有java.awt.PrinterJob类。要显示standart打印预览,应调用:

PrinterJob job = PrinterJob.getPrinterJob();
job.printDialog();

组件只能属于单个父级。将其添加到
PreviewFrame
时,它将自动从
ActualFrame
中删除

使用上一个面板中的模型创建新的
JTable
,而不是使用上一个面板

更新

打印表格稍微复杂一些,因为其中包括标题,需要调整列的大小以满足可用空间的要求


查看一些示例

JScrollPane从
实际帧
中消失的原因是:您正在
预览帧
中添加相同的
窗格
实例。因此,
窗格的实际容器现在是
PreviewFrame
,而不是
ActualFrame
。当您最大化或调整
实际帧的大小时,它会重新绘制其子组件。由于
窗格
现在不再属于
实际帧
它现在不显示
窗格

避免这种情况的最佳方法是首先创建一个单独的

JTabel
实例,而不是在创建对象
pane
时在
JScrollPane
的构造函数中传递匿名
JTable
类对象。获取该
JTable
实例的
TableModel
TableColumnModel
。在
previewFrame
中添加一个
JScrollPane
的新实例,该实例将包含具有相同
TableModel
TableColumnModel
对象的
JTable
的新实例。 代码如下所示:

final JTable table = new JTable(data,columns);
JScrollPane pane = new JScrollPane(table);
ActualFrame.add(pane);
ActualFrame.add(PrintPreviewBtn);

PrintPreviewBtn.addActionListener(new ActionListener() {            
 public void actionPerformed(ActionEvent e) {
   JFrame previewFrame = new JFrame("Preview");
   javax.swing.table.TableModel tabModel = table.getModel();
   javax.swing.table.TableColumnModel colModel = table.getColumnModel();
   JScrollPane previewPane = new JScrollPane(new JTable(tabModel,colModel));
   previewFrame.getContentPane().add(previewPane, BorderLayout.CENTER);
   previewFrame.pack();previewFrame.setVisible(true);
}

@疯狂程序员-谢谢你的信息,对我这样的初学者真的很有用。。。