我遇到了一些奇怪的问题。基本上我的程序的一部分设置和更新列表,它显示得很好,但是当我在程序的另一部分使用相同的代码时,它没有。
所以我尝试做的是在单击按钮时(在程序运行并且帧已经加载之后)在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();
有没有办法解决这个问题?
答案 0 :(得分:0)
我认为问题是你正在尝试创建一个接口实例:
btnFileList.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {...
您可能想要做的是创建一个实现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);
}
}
}
编译,运行和多次点击后输出的屏幕截图: