gpt4 book ai didi

Java Swing - JTable 未显示

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:48 24 4
gpt4 key购买 nike

我在使用 Java Swing 时遇到了一些麻烦。我正在尝试在顶部制作一个带有控制面板的框架,其中包含一些按钮。在它下面我想要一个 JTable 来显示

我一直在尝试,但表格没有显示。如果我删除顶部的 controlPanel,它有时会显示,有时不会。我在 JTable 的构造函数中使用的代码在同一个应用程序中提供,所以这不是网络错误

public ServerMainFrame(GuiController gc){
this.gc = gc;
initGUI();
}

private void initGUI() {
System.out.println("initiating GUI");
createFrame();
addContentPanel();
addControls();
//openPopUpServerSettings();
addSongTable();
}

private void createFrame()
{
this.setTitle("AudioBuddy 0.1");
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(800, 600);
this.setResizable(false);
this.setLocationRelativeTo(null);
}

private void addContentPanel()
{
JPanel p = new JPanel();
p.setLayout(new FlowLayout());
p.setSize(new Dimension(800, 600));
this.setContentPane(p);
}

private void addControls()
{
JPanel controlPanel = new JPanel();
controlPanel.setLayout(new FlowLayout());
controlPanel.setBorder(BorderFactory.createLineBorder(Color.black));
controlPanel.setSize(700,100);

// Buttons
JButton play = new JButton("Play");
JButton pause = new JButton("Pause");
JButton stop = new JButton ("Stop");
JButton next = new JButton("Next");
JButton prev = new JButton("Previous");
controlPanel.add(play);
controlPanel.add(pause);
controlPanel.add(stop);
controlPanel.add(next);
controlPanel.add(prev);

// Currently playing
JLabel playing = new JLabel("Currently playing:");
controlPanel.add(playing);

JLabel current = new JLabel("Johnny Cash - Mean as Hell");
controlPanel.add(current);

this.getContentPane().add(controlPanel);
}

private void addSongTable()
{
JTable songTable = new JTable(Server.getSongTableModel());
songTable.setVisible(true);
JPanel tablePanel = new JPanel();
tablePanel.setVisible(true);
tablePanel.add(songTable);
songTable.repaint();
this.getContentPane().add(tablePanel);

JButton btnMulticastList = new JButton("send list to clients");
btnMulticastList.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
Server.MulticastPlaylist();
}
});

getContentPane().add(btnMulticastList);
}

最佳答案

if I remove the controlPanel at the top, it sometimes shows and sometimes not.

  • 一切都隐藏在 Server.getSongTableModel() 中,没有人知道不发布 SSCCE硬编码值返回自

  • GUI 与 Concurency in Swing 有问题

  • XxxModel在构建GUI时不断加载数据,然后出现异常导致描述的问题

The code that I use inside my constructor of my JTable is provided in the same application, so it's no network error

  • 不知道你在说什么

  • 必须创建一个空的 GUI,参见 InitialTread

  • 显示 GUI,然后开始将数据加载到 JTable

  • 然后从 SwingWorker 或(描述网络问题)更好地启动 Workers Thread(后台任务)Runnable#Thread(便于捕获异常并单独处理线程)

  • Runnable 到 Swing GUI 的输出必须包装到 invokeLater()

关于Java Swing - JTable 未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13343829/

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