public static void main(String[] args) throws Exception { JFrame frame=new JFrame("记事本程序"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400,400); frame.setVisible(true); JTextField textField=new JTextField(); frame.add(textField); // 制作菜单栏 JMenuBar jMenuBar=new JMenuBar(); // 2个菜单文件和编辑 JMenu jMenu1=new JMenu("文件"); JMenu jMenu2=new JMenu("编辑"); // 菜单功能,按钮 JMenuItem jMenuItem1=new JMenuItem("打开"); jMenuItem1.addActionListener(new Hello()); jMenuItem1.setActionCommand("打开"); JMenuItem jMenuItem2=new JMenuItem("保存"); JMenuItem jMenuItem3=new JMenuItem("xing'j"); // 添加菜单栏 frame.setJMenuBar(jMenuBar); // 添加2个菜单 jMenuBar.add(jMenu1); jMenuBar.add(jMenu2); // 菜单加功能 jMenu1.add(jMenuItem1); jMenu2.add(jMenuItem2); } @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("打开")) { //文件选择框 JFileChooser fileChooser = new JFileChooser(); // 定义标题 fileChooser.setDialogTitle("选择文件"); // 设置默认路径 fileChooser.showOpenDialog(null); // 弹出窗口 fileChooser.setVisible(true); // 保存绝对路径 String address = fileChooser.getSelectedFile().getAbsolutePath(); try { FileReader fileReader = new FileReader(address); BufferedReader bufferedReader = new BufferedReader(fileReader); String str = ""; String strAll = ""; while ((str = bufferedReader.readLine()) != null) { strAll += str; } textField.setText(strAll); bufferedReader.close(); fileReader.close(); } catch (IOException fileNotFoundException) { fileNotFoundException.printStackTrace(); } } }
时间: 2024-02-14 07:12:47 浏览: 81
这段代码使用Java Swing编写了一个简单的记事本程序。程序打开后,会展示一个文本框和一个菜单栏,菜单栏包括文件和编辑两个菜单。文件菜单下有打开和保存功能,编辑菜单下有一个名为“xing'j”的按钮,但没有实现具体功能。当点击打开菜单下的打开功能时,会弹出一个文件选择框,用户可以选择任意一个文件,程序会将文件内容读入到文本框中展示出来。
相关问题
import javax.swing.*; import java.awt.*; public class DisplayImage { public static void main(String[] args) { SwingUtilities.invokeLater(() -> { JFrame frame = new JFrame("Image Display"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ImageIcon imageIcon = new ImageIcon("path/to/your/image.jpg"); // 替换为实际的图片路径 JLabel label = new JLabel(imageIcon); frame.getContentPane().add(label); frame.pack(); frame.setVisible(true); }); } }解释这段代码并告诉我如何在基于Java I/O流的socket通信中使用
这段代码展示了如何使用Java Swing库来显示一张图片。它首先创建了一个JFrame对象,并设置了标题和关闭操作。然后,它创建了一个ImageIcon对象并指定了图片的路径。接下来,它创建了一个JLabel对象并将ImageIcon对象设置为其图像。最后,它将JLabel对象添加到JFrame对象的content pane中,并显示JFrame。
如果想要在基于Java I/O流的socket通信中使用这段代码,可以将其包装在一个方法中,并在需要显示图片时调用该方法。例如,可以在服务器端读取图片文件,并将其发送到客户端,然后客户端可以使用该方法显示接收到的图片。代码示例:
```java
public static void displayImage(InputStream inputStream) throws IOException {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Image Display");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
byte[] buffer = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len;
while ((len = inputStream.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
byte[] imageData = baos.toByteArray();
ImageIcon imageIcon = new ImageIcon(imageData);
JLabel label = new JLabel(imageIcon);
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);
});
}
```
这个方法接受一个InputStream参数,该参数是从socket中读取的数据流。它将数据流读取到一个ByteArrayOutputStream中,然后将其转换为一个byte数组。接下来,它创建一个ImageIcon对象,并将该byte数组传递给构造函数。最后,它创建一个JLabel对象并将ImageIcon对象设置为其图像,然后将JLabel对象添加到JFrame对象中,并显示JFrame。
import javax.swing.; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; public class demo { public static void main(String[] args) throws RuntimeException { JFrame jFrame=new JFrame("登录窗口"); JLabel oo=new JLabel("账号",JLabel.CENTER); JLabel qq=new JLabel("密码",JLabel.CENTER); JTextField ii = new JTextField(10); JPasswordField kk = new JPasswordField(10); JButton mm=new JButton("确定"); JButton ss=new JButton("注册"); JPanel p=new JPanel(); p.setLayout(new GridLayout(3,2)); JPanel p1=new JPanel(); p1.add(oo); p1.add(ii); JPanel p2=new JPanel(); p2.add(qq); p2.add(kk); JPanel p3=new JPanel(); p3.add(mm); p3.add(ss); p.add(p1); p.add(p2); p.add(p3); jFrame.setSize(400,300); jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE); jFrame.setVisible(true); jFrame.add(p); ss.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { demo d=new demo(); d.pp(p1,p2); } }); } public void pp(JPanel i, JPanel name){ try{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection configuration= DriverManager.getConnection("jdbc:mysql://localhost:3306/xscj?db_student","root","123456"); Statement system=configuration.createStatement(); String sql=("insert into opop values("+i +","+"'"+name+"')"); system.executeUpdate(sql); String ll="select * from opop"; ResultSet set=system.executeQuery(ll); while(set.next()){ String id =set.getString("ID"); String pp=set.getString("name"); System.out.println(id+pp); } System.out.println(" "); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } catch (SQLException e) { throw new RuntimeException(e); } } public void uu(){ } }优化这段代码
以下是对代码进行优化的建议:
1. 将`demo`这个类重命名为更具描述性的类名,比如`LoginWindow`。
2. 将所有的Swing组件创建和UI布局放在一个独立的方法里,如`createUI()`,然后在主方法中调用该方法。这样可以提高代码的可读性和可维护性。
3. 避免在主线程中进行数据库操作。应该将数据库操作放在单独的线程中,以免阻塞UI线程,导致用户体验不佳。
4. 将数据库操作封装在独立的类中,比如`DatabaseHelper`,以提高代码的可重用性和可维护性。
5. 在处理异常时,应该将异常抛出或记录到日志中,而不是简单地抛出`RuntimeException`。
下面是优化后的代码示例:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LoginWindow {
private JTextField accountTextField;
private JPasswordField passwordField;
public static void main(String[] args) {
LoginWindow loginWindow = new LoginWindow();
loginWindow.createUI();
}
private void createUI() {
JFrame jFrame = new JFrame("登录窗口");
JLabel accountLabel = new JLabel("账号", JLabel.CENTER);
JLabel passwordLabel = new JLabel("密码", JLabel.CENTER);
accountTextField = new JTextField(10);
passwordField = new JPasswordField(10);
JButton loginButton = new JButton("确定");
JButton registerButton = new JButton("注册");
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3, 2));
JPanel panel1 = new JPanel();
panel1.add(accountLabel);
panel1.add(accountTextField);
JPanel panel2 = new JPanel();
panel2.add(passwordLabel);
panel2.add(passwordField);
JPanel panel3 = new JPanel();
panel3.add(loginButton);
panel3.add(registerButton);
panel.add(panel1);
panel.add(panel2);
panel.add(panel3);
jFrame.setSize(400, 300);
jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
jFrame.add(panel);
registerButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String account = accountTextField.getText();
String password = new String(passwordField.getPassword());
DatabaseHelper.addUser(account, password);
}
});
}
}
class DatabaseHelper {
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/xscj?db_student";
private static final String USERNAME = "root";
private static final String PASSWORD = "123456";
public static void addUser(String account, String password) {
new Thread(() -> {
try (Connection connection = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);
Statement statement = connection.createStatement()) {
String sql = "INSERT INTO opop VALUES ('" + account + "', '" + password + "')";
statement.executeUpdate(sql);
String query = "SELECT * FROM opop";
ResultSet resultSet = statement.executeQuery(query);
while (resultSet.next()) {
String id = resultSet.getString("ID");
String name = resultSet.getString("name");
System.out.println(id + name);
}
System.out.println(" ");
} catch (SQLException e) {
e.printStackTrace();
}
}).start();
}
}
```
希望这些优化可以对您有所帮助。
阅读全文