gpt4 book ai didi

Java JTable 和 JToolBar 奇怪地调整大小

转载 作者:行者123 更新时间:2023-12-01 05:33:52 25 4
gpt4 key购买 nike

今天我注意到我的程序有非常奇怪的行为。基本上我有 JToolBar uder,它是带有 JTable 的 JScrollPane。两者都在 JFrame 内的 JPanel 内。每个容器都使用 MigLayout。

现在,如果我启动应用程序,这是它的默认外观:enter image description here

但是,如果我移动 JToolBar 并将其夹回到原始位置,现在它看起来像这样: enter image description here

突然之间就没有边界了。如果一开始就没有的话,我会更喜欢,但是改变 GUI 的外观根本不是一个好功能...如果您知道出了什么问题,请帮忙:)

代码:

public class Gui extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel mainPnl = null;
private JToolBar toolbar = null;
private Session session = null;

public Gui(Session session) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (UnsupportedLookAndFeelException e) {
} catch (ClassNotFoundException e) {
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
}

this.session = session;

setTitle("PRO2-Contact Manager v_0.1");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800,420);
setResizable(true);

initMenu();
initMainPnl();
initToolbar();
initTable();

// KeyboardFocusManager manager =
// KeyboardFocusManager.getCurrentKeyboardFocusManager();
// manager.addKeyEventDispatcher(new MyDispatcher(aList));

setLocationRelativeTo(null);
setVisible(true);
}

private void initMenu() {
JMenuBar menu = new JMenuBar();
MenuListener ml = new MenuListener();

JMenu file = new JMenu("File");
file.setMnemonic(KeyEvent.VK_F);
menu.add(file);

JMenuItem exit = new JMenuItem("Exit");
exit.setMnemonic(KeyEvent.VK_E);
exit.addActionListener(ml);
file.add(exit);

JMenu help = new JMenu("Help");
help.setMnemonic(KeyEvent.VK_H);
menu.add(help);

JMenuItem controls = new JMenuItem("Controls");
controls.setMnemonic(KeyEvent.VK_C);
controls.addActionListener(ml);
help.add(controls);

JMenuItem about = new JMenuItem("About");
about.setMnemonic(KeyEvent.VK_A);
about.addActionListener(ml);
help.add(about);

setJMenuBar(menu);
}

private void initMainPnl(){
mainPnl = new JPanel(new MigLayout());

add(mainPnl);
}

private void initToolbar() {
toolbar = new JToolBar(JToolBar.HORIZONTAL);
toolbar.add(new JButton());
mainPnl.add(toolbar,"wrap");
}

private void initTable() {
MyTable table = new MyTable(new MyTableModel(this));
JScrollPane sp = new JScrollPane(table);
sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

mainPnl.add(sp,"w 100%, h 100%");
}}

最佳答案

从技术上讲,JToolBar 可以添加到具有任何布局约束的容器中。仅当对于 BorderLayout 时才支持自动将 float 工具栏重新添加到容器。不要添加到 mainPanel,而是将其添加到 contentPane:

private void initToolbar() {
toolbar = new JToolBar(JToolBar.HORIZONTAL);
toolbar.add(new JButton());
add(toolbar, BorderLayout.NORTH);
}

顺便说一句:您的代码不会在您的上下文之外进行编译 - MyPanel、MyTableModel、MenuListener 是本地类,在其他地方不可用,而且缺少 main 方法。为了更快地获得更好的帮助,请考虑将来提供 SSCCE :-)

关于Java JTable 和 JToolBar 奇怪地调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8548965/

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