使 JPanel 动态适应 JDialog
Making JPanel dynamically fit into JDialog
我有一个从 class 返回的 JPanel,然后在新面板的底部添加了一个按钮。
代码是这样的:
String csv = csvName.getText();
String csvN = (String)ss.getSelectedItem()+csv+".csv";
JPanel f = T1Data.program(csvN);
JDialog desktopFrame = new JDialog();
desktopFrame.add(f);
desktopFrame.setModal(true);
desktopFrame.setSize(900, 500);
desktopFrame.setVisible(true);
这是 T1Data.program class.
public static JPanel program(String csvName) {
JPanel f = new JPanel(new BorderLayout());
try {
String path = System.getProperty("user.dir");
String datafile = path+csvName;
FileReader fin = new FileReader(datafile);
DefaultTableModel m = createTableModel(fin, null);
JTable table = new JTable(m);
JScrollPane stable = new JScrollPane (table);
stable.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
stable.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
f.add(stable,BorderLayout.NORTH);
JButton btn = new JButton("Save Edits");
f.add(btn,BorderLayout.SOUTH);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
toExcel(m, new File(path+csvName));
JOptionPane.showMessageDialog(f, "Saved CSV File!");
}
});
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
当我运行它时,它会正常显示并且完全适合。我已经在评论中 post 编辑了一个 link 因为我现在不能 post 3 link 在 post 中。
如果我把它变小,会发生这种情况:http://i.gyazo.com/0d7792cc11eaaba66c6743f5cb5addd7.png水平条和保存按钮消失了。
如果我把它变大,会发生这种情况:http://gyazo.com/b4820450324d308ea4b4710af8acc6a7.png JTable 下有一个很大的缝隙。
我该如何解决这个问题,以便 JTable 动态调整大小以适应 JDialog?
你可能想改变这个:
f.add(stable,BorderLayout.NORTH);
对此:
f.add(stable, BorderLayout.CENTER);
JScrollPane 应该放在 BorderLayout 的中心,因为当父组件调整大小时,中心组件将水平和垂直拉伸。边缘组件仅在一个维度上拉伸,这通常不是 JScrollPane 的意图。
我有一个从 class 返回的 JPanel,然后在新面板的底部添加了一个按钮。
代码是这样的:
String csv = csvName.getText();
String csvN = (String)ss.getSelectedItem()+csv+".csv";
JPanel f = T1Data.program(csvN);
JDialog desktopFrame = new JDialog();
desktopFrame.add(f);
desktopFrame.setModal(true);
desktopFrame.setSize(900, 500);
desktopFrame.setVisible(true);
这是 T1Data.program class.
public static JPanel program(String csvName) {
JPanel f = new JPanel(new BorderLayout());
try {
String path = System.getProperty("user.dir");
String datafile = path+csvName;
FileReader fin = new FileReader(datafile);
DefaultTableModel m = createTableModel(fin, null);
JTable table = new JTable(m);
JScrollPane stable = new JScrollPane (table);
stable.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
stable.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
f.add(stable,BorderLayout.NORTH);
JButton btn = new JButton("Save Edits");
f.add(btn,BorderLayout.SOUTH);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
toExcel(m, new File(path+csvName));
JOptionPane.showMessageDialog(f, "Saved CSV File!");
}
});
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
当我运行它时,它会正常显示并且完全适合。我已经在评论中 post 编辑了一个 link 因为我现在不能 post 3 link 在 post 中。
如果我把它变小,会发生这种情况:http://i.gyazo.com/0d7792cc11eaaba66c6743f5cb5addd7.png水平条和保存按钮消失了。
如果我把它变大,会发生这种情况:http://gyazo.com/b4820450324d308ea4b4710af8acc6a7.png JTable 下有一个很大的缝隙。
我该如何解决这个问题,以便 JTable 动态调整大小以适应 JDialog?
你可能想改变这个:
f.add(stable,BorderLayout.NORTH);
对此:
f.add(stable, BorderLayout.CENTER);
JScrollPane 应该放在 BorderLayout 的中心,因为当父组件调整大小时,中心组件将水平和垂直拉伸。边缘组件仅在一个维度上拉伸,这通常不是 JScrollPane 的意图。