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);
}
@疯狂程序员-谢谢你的信息,对我这样的初学者真的很有用。。。