【发布时间】:2016-06-28 21:54:37
【问题描述】:
我正在开发一个聊天客户端程序,目前我可以获得文本窗格,左侧的文本输入。我可以添加按钮并将背景颜色更改为右侧,但无法在右侧显示图像。从我所读到的内容中,有不止一种方法可以在此上给猫剥皮,但我正在尝试坚持我目前拥有的设置,因此我不必重写所有内容。我了解 Java (OOP) 的基础知识及其工作原理。我只是迷失了如何格式化图像图标并让这个图像显示。这是代码:我正在使用 IntelliJ 进行编译。
package edu.lmu.cs.networking;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import javax.swing.ImageIcon;
import javax.imageio.ImageIO;
import javax.swing.*;
public class ChatClient {
private BufferedReader in;
private PrintWriter out;
private JFrame frame = new JFrame("Chatter");
private JTextField textField = new JTextField(20);
private JTextArea messageArea = new JTextArea(8, 40);
private JPanel panel;
private JButton button;
private JLabel label;
public ChatClient() {
textField.setEditable(false);
messageArea.setEditable(false);
// frame.setSize(500, 500);
// frame.setVisible(true);
frame.getContentPane().add(textField, "South");
frame.getContentPane().add(new JScrollPane(messageArea), "West");
panel = new JPanel();
panel.setBackground(Color.YELLOW);
button = new JButton("Button");
label = new JLabel(new ImageIcon("x.gif"));
panel.add(button);
panel.add(label, BorderLayout.EAST);
frame.add(panel);
frame.pack();
textField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
out.println(textField.getText());
textField.setText("");
}
});
}
private String getServerAddress() {
return JOptionPane.showInputDialog(frame, "Enter IP Address of the Server:",
"Welcome to the Chatter", JOptionPane.QUESTION_MESSAGE);
}
private String getName() {
return JOptionPane.showInputDialog(frame, "Choose a screen name:", "Screen name selection",
JOptionPane.PLAIN_MESSAGE);
}
private void run() throws IOException {
// Make connection and initialize streams
String serverAddress = getServerAddress();
Socket socket = new Socket(serverAddress, 5910);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
while (true) {
String line = in.readLine();
if (line.startsWith("SUBMITNAME")) {
out.println(getName());
} else if (line.startsWith("NAMEACCEPTED")) {
textField.setEditable(true);
} else if (line.startsWith("MESSAGE")) {
messageArea.append(line.substring(8) + "\n");
}
}
}
public static void main(String[] args) throws Exception {
ChatClient client = new ChatClient();
client.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
client.frame.setVisible(true);
client.run();
}
}
提前致谢, -布兰登
【问题讨论】:
-
这段代码能编译吗?
-
例如,您在 JLabel 中创建的
CreateImageIcon类是什么?为什么不调用实际的 ImageIcon 构造函数? -
我发布了整个代码。它编译得很好。只是没有图像。我正在尝试用我编辑的 CreateImageIcon 做一些不同的事情。
-
您的问题与其他数百个类似的问题相同-您没有正确查找图像,图像文件的路径是相对于用户目录的,而您不是考虑到这一点。但无论如何,您应该按照克强的建议使用资源。
-
但是感谢您现在发布更有意义的代码。
标签: java image swing icons jpanel