gpt4 book ai didi

java - 使用 MigLayout,为什么 JTable 后面的 JButton 无响应以及如何解决此问题?

转载 作者:行者123 更新时间:2023-11-30 05:13:26 24 4
gpt4 key购买 nike

关于在 MigLayout 的 JTable 后面使用 JButton,我遇到了一个令人难以置信的问题。它完全没有响应,除非我将它推到 JTable 足够远的地方(然后它才能正确运行)。

我尝试使用我们用于最终用户产品的 MigLayout JAR 版本和最新版本来运行代码;相同的结果。

这里是重现问题的示例代码 (Main.java):

import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

import net.miginfocom.swing.MigLayout;

@SuppressWarnings("serial")
public class Main extends JFrame {

private JPanel panel;
private JTextField textField;
private JButton chooseButton;
private JTable table;
private JButton reloadButton;
private final DefaultTableModel model = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};

public Main() {
panel = new JPanel(new MigLayout("debug", "[][grow][]"));
setContentPane(panel);
setDefaultCloseOperation(EXIT_ON_CLOSE);

/*** First row ***/
// "File:"
panel.add(new JLabel("File:"));

// textField for filename
textField = new JTextField("No file selected yet!");
textField.setEditable(false);
panel.add(textField, "growx");

// "Choose..." button
chooseButton = new JButton("Choose...");
panel.add(chooseButton, "wrap, sg buttons");

/*** Second row ***/
panel.add(new JLabel());
table = new JTable(model);
model.setColumnIdentifiers(new String[] {"col title"});
JScrollPane scrollpane = new JScrollPane(table);
Dimension scrollpaneDimension = new Dimension(125, 110);
scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
table.setPreferredScrollableViewportSize(scrollpaneDimension);
table.setFillsViewportHeight(true);
panel.add(table.getTableHeader(), "grow");
panel.add(scrollpane, "grow");

reloadButton = new JButton("Reload");
panel.add(reloadButton, "top, wrap, sg buttons");

pack();
setVisible(true);
}

public static void main(String[] args) {
new Main();
}

}

我想这与表格标题和表格本身最终位于同一布局单元格有关,但我真的不确定这一点。

正如我所说,如果我将按钮推到 JTable 之外足够远的位置,它就会再次工作。如果我把它放在下一行,它就不起作用,我必须将它再向下移动一行。

工作区中运行代码所需的唯一库是 MigLayout .

感谢大家的帮助,非常感谢!

M。乔尼斯

最佳答案

我不认为这是 MigLayout 问题,本身。按钮无需线路即可正常工作

panel.add(table.getTableHeader(), "grow");

您可以尝试将标题/表格组合包装在子面板中:

JPanel sub = new JPanel();
sub.add(table.getTableHeader(), "grow");
sub.add(scrollpane, "grow");
panel.add(sub);

关于java - 使用 MigLayout,为什么 JTable 后面的 JButton 无响应以及如何解决此问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2511286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com