Java GUI - JList不会显示

时间:2017-09-12 16:53:05

标签: java swing jlist

我遇到了一些奇怪的问题。基本上我的程序的一部分设置和更新列表,它显示得很好,但是当我在程序的另一部分使用相同的代码时,它没有。

所以我尝试做的是在单击按钮时(在程序运行并且帧已经加载之后)在JList中显示名称列表,并且JList组件只是拒绝显示任何内容。 / p>

代码工作集和唯一的区别在于,此代码位于try catch(我的客户端服务器代码需要)中。我知道它不是客户端服务器问题,但我需要try代码捕获我的代码。

这是我的代码(已注释掉的东西是我解决问题的一些尝试,但还没有用):

JList<String> lReceivedlClient1Files = new JList<String>();

//String[] FakeList = new String[1];
//FakeList[0] = "No files to display yet";
//lReceivedlClient1Files.setListData(FakeList);

JButton btnFileList = new JButton("Request file list");
btnFileList.addActionListener(new ActionListener()
{
    @Override
    public void actionPerformed(ActionEvent e) 
    {
        try
        {

            ////other client server code is here////

            int Counter = 0;
            for (int i = 0;i<NamesList.length;i++)
            {
                LeecherSocket.receive(TheNamePacket);
                TheName = new String(TheNameBuffer);

                NamesList[Counter] = TheName;
                Counter+=1;
            }

            lReceivedlClient1Files.setListData(NamesList);
            //lReceivedlClient1Files.setModel(NamesList);
            //lReceivedlClient1Files = new JList(NamesList);
            //validate();
        }
        catch (UnknownHostException e1) 
        {
            e1.printStackTrace();
        } 
        catch (SocketException e1) 
        {
            e1.printStackTrace();
        } 
        catch (IOException e1)
        {
            e1.printStackTrace();
        }
    }
});

LeecherPanel.add(lblFileList);
LeecherPanel.add(btnFileList);
LeecherPanel.add(lReceivedlClient1Files);

add(LeecherPanel);

pack();

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为问题是你正在尝试创建一个接口实例:

  

btnFileList.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {...

请参阅docs on ActionListener

您可能想要做的是创建一个实现ActionListener的嵌套类(请记住,您实现了接口,而扩展了类)。与您的工作方式不相似的事情示例:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class ButtonTest {
    JButton button;

    public static void main(String[] args) {
        ButtonTest gui = new ButtonTest();
        gui.go();
    }

    public void go() {
        JFrame frame = new JFrame("Button test");
        button = new JButton("clik meh pl0x");

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String buttonText = button.getText();
                buttonText += " <teehee>";
                button.setText(buttonText);
            }
        });

        frame.getContentPane().add(BorderLayout.NORTH, button);
        frame.setSize(1000,100);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

如何使用嵌套类修复它:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class ButtonTest {
    JButton button;

    public static void main(String[] args) {
        ButtonTest gui = new ButtonTest();
        gui.go();
    }

    public void go() {
        JFrame frame = new JFrame("Button test");
        button = new JButton("clik meh pl0x");

        button.addActionListener(new ButtonListener());

        frame.getContentPane().add(BorderLayout.NORTH, button);
        frame.setSize(1000,100);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    public class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
                String buttonText = button.getText();
                buttonText += " <teehee>";
                button.setText(buttonText);
        }
    }
}

编译,运行和多次点击后输出的屏幕截图:

Picture