【问题标题】:Making JPanel dynamically fit into JDialog使 JPanel 动态适应 JDialog
【发布时间】:2015-06-03 17:56:17
【问题描述】:

我有一个从类返回的 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 类。

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;

}

当我运行它时,它会正常显示并且一切正常。我已经在 cmets 中发布了指向它的链接,因为我现在无法在帖子中发布 3 个链接。

如果我把它变小,会发生这种情况:http://i.gyazo.com/0d7792cc11eaaba66c6743f5cb5addd7.png 水平条和保存按钮消失了。

如果我把它变大,会发生这种情况:http://gyazo.com/b4820450324d308ea4b4710af8acc6a7.png JTable 下面有一个很大的差距。

如何解决这个问题,以便 JTable 动态调整大小以适应 JDialog?

【问题讨论】:

  • i.gyazo.com/7839a99436ae55931a7dcf7e9f93048a.png 这是正常情况下的链接。
  • 为什么要调用 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); ?
  • 因为如果我改变列宽,其他列会变小,所以我宁愿水平滚动在那里@ControlAltDel
  • 检查第一个图片链接 - 我得到Gyazo image is not found
  • @copeg 已排序并修复

标签: java swing resize


【解决方案1】:

你可能想改变这个:

f.add(stable,BorderLayout.NORTH);

到这里:

f.add(stable, BorderLayout.CENTER);

应将 JScrollPane 放置在 BorderLayout 的中心,因为在调整父级大小时,中心组件将水平和垂直拉伸。边缘组件仅在一维中拉伸,这通常不是 JScrollPane 的意图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多