Java.Container.ScrollPane-Panel

本文介绍了一个名为TestPane的应用示例,该应用使用Java AWT库创建了一个包含文本区域和滚动条的基本窗口。当窗口关闭时,应用程序会退出。

"C:\Program Files\Java\jdk-17\bin\java.exe" "-javaagent:G:\IntelliJ IDEA 2025.1.3\lib\idea_rt.jar=55133" -Dfile.encoding=UTF-8 -classpath G:\Demo\Demo\target\classes;C:\Users\Administrator\.m2\repository\net\wimpi\jamod\1.2\jamod-1.2.jar;C:\Users\Administrator\.m2\repository\org\rxtx\rxtx\2.1.7\rxtx-2.1.7.jar;C:\Users\Administrator\.m2\repository\org\scream3r\jssc\2.8.0\jssc-2.8.0.jar;C:\Users\Administrator\.m2\repository\com\fazecast\jSerialComm\2.10.3\jSerialComm-2.10.3.jar;C:\Users\Administrator\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-jdk8\2.2.0\kotlin-stdlib-jdk8-2.2.0.jar;C:\Users\Administrator\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-jdk7\2.2.0\kotlin-stdlib-jdk7-2.2.0.jar;C:\Users\Administrator\.m2\repository\org\swinglabs\swingx\1.6.1\swingx-1.6.1.jar;C:\Users\Administrator\.m2\repository\com\jhlabs\filters\2.0.235\filters-2.0.235.jar;C:\Users\Administrator\.m2\repository\org\swinglabs\swing-worker\1.1\swing-worker-1.1.jar;C:\Users\Administrator\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib\2.2.0\kotlin-stdlib-2.2.0.jar;C:\Users\Administrator\.m2\repository\org\jetbrains\annotations\13.0\annotations-13.0.jar demo1.Main Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.awt.Window.revalidate()" because the return value of "javax.swing.SwingUtilities.getWindowAncestor(java.awt.Component)" is null at demo1.TemperatureMonitorGUI.updateInputFieldsVisibility(TemperatureMonitorGUI.java:207) at demo1.TemperatureMonitorGUI.lambda$new$1(TemperatureMonitorGUI.java:58) at java.desktop/javax.swing.JComboBox.fireActionEvent(JComboBox.java:1294) at java.desktop/javax.swing.JComboBox.setSelectedItem(JComboBox.java:619) at java.desktop/javax.swing.JComboBox.setSelectedIndex(JComboBox.java:654) at java.desktop/javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:946) at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:298) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6626) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3389) at java.desktop/javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:551) at java.desktop/java.awt.Component.processEvent(Component.java:6391) at java.desktop/java.awt.Container.processEvent(Container.java:2266) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5001) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:746) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:744) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:743) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.awt.Window.revalidate()" because the return value of "javax.swing.SwingUtilities.getWindowAncestor(java.awt.Component)" is null at demo1.TemperatureMonitorGUI.updateInputFieldsVisibility(TemperatureMonitorGUI.java:207) at demo1.TemperatureMonitorGUI.lambda$new$1(TemperatureMonitorGUI.java:58) at java.desktop/javax.swing.JComboBox.fireActionEvent(JComboBox.java:1294) at java.desktop/javax.swing.JComboBox.setSelectedItem(JComboBox.java:619) at java.desktop/javax.swing.JComboBox.setSelectedIndex(JComboBox.java:654) at java.desktop/javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:946) at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:298) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6626) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3389) at java.desktop/javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:551) at java.desktop/java.awt.Component.processEvent(Component.java:6391) at java.desktop/java.awt.Container.processEvent(Container.java:2266) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5001) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:746) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:744) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:743) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 选择HEX和float之后就报错,而且界面很不协调
最新发布
07-16
帮我改写的能运行起来package com.swingtest; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import javax.swing.table.DefaultTableModel; public class StudentManger extends JFrame implements ActionListener { JLabel lstname = new JLabel("学生姓名: "); JTextField tf_name = new JTextField(12); JLabel lmajor = new JLabel("专业"); JTextField tf_major = new JTextField(); JButton btnOK = new JButton("添加"); JButton btnDelete = new JButton("删除"); JButton btnQuit = new JButton("退出"); JTable table; DefaultTableModel model; public void studentManger(String name) { // TODO Auto-generated constructor stub JLabel welcome = new JLabel(name +",欢迎登录!"); setTitle("学生管理"); setSize(400,400); welcome.setBounds(50,20,200,20); lstname.setBounds(50,20,200,20); tf_name.setBounds(150,50,100,20); lmajor.setBounds(50,80,100,20); tf_major.setBounds(150,80,100,20); btnOK.setBounds(80,110,60,20); btnDelete.setBounds(150,110,60,20); btnQuit.setBounds(220,110,60,20); Container c = getContentPane(); JPanel panel = new JPanel(); panel.setLayout(null); panel.add(welcome); panel.add(lstname); panel.add(tf_name); panel.add(lmajor); panel.add(tf_major); panel.add(btnOK); panel.add(btnDelete); panel.add(btnQuit); String[] colName = {"姓名","专业"}; model = new DefaultTableModel(colName,0); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); c.setLayout(new SpringLayout()); c.add(panel); c.add(scrollPane); setLocationRelativeTo(null); setVisible(true); btnOK.addActionListener(this); btnDelete.addActionListener(this); btnQuit.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub Object ob = e.getSource(); if(ob == btnQuit) { System.exit(0); }else if(ob ==btnOK) { String[] stuInfo = {tf_name.getText(),tf_major.getText()}; model.addRow(stuInfo); tf_name.setText(""); tf_major.setText(""); }else if(ob == btnDelete) { if(table.getSelectedRow()<0) { JOptionPane.showMessageDialog(null,"请在表格中选中要删除的行");} else { model.removeRow(table.getSelectedRow()); } }} public static void main(String[] args) { new StudentManger(); } }
06-06
import javax.swing.*; import javax.swing.border.Border; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.io.FileNotFoundException; import java.util.Arrays; public class PhotoGallery extends JPanel implements PropertyChangeListener { private final int THUMBNAIL_SIZE = 150; // 缩略图固定宽高 public PhotoGallery(TreeSelectionModel model){ model.addPropertyChangeListener(this); // 注册监听 } @Override public void propertyChange(PropertyChangeEvent evt) { if ("selectedPath".equals(evt.getPropertyName())) { String newPath = (String) evt.getNewValue(); updatePreview(newPath); // 根据新路径更新预览 } } private void updatePreview(String path) { System.out.println("路径已更新: " + path); // 实际业务逻辑(如加载文件内容、显示缩略图等) init(path); } public void init(String filepath) { File folder = new File(filepath); if (!folder.exists() || !folder.isDirectory()) { System.out.println("指定的文件夹路径不正确或无法识别!"); return; } File[] images = folder.listFiles((dir, name) -> name.toLowerCase().endsWith(".jpg") || name.toLowerCase().endsWith(".png") || name.toLowerCase().endsWith(".jpeg") || name.toLowerCase().endsWith(".gif") || name.toLowerCase().endsWith("bmp")); if (images == null) { System.out.println("无法列出文件夹内的项目."); return; } JPanel imageContainer = new JPanel(); imageContainer.setLayout(new GridLayout(0, 4,5,5)); // 设定网格布局,一行四列 for (File file : Arrays.asList(images)) { BufferedImage img = ImageUtils.resizeImage(file.getAbsolutePath(), THUMBNAIL_SIZE, THUMBNAIL_SIZE); JLabel label = new JLabel(new ImageIcon(img)); label.setText(file.getName()); label.setFont(new Font("微软雅黑", Font.PLAIN, 16)); // 设置字体 label.setForeground(Color.BLACK); // 设置字体颜色 label.setHorizontalTextPosition(JLabel.CENTER); // 设置文字水平对齐方式为居中 label.setVerticalTextPosition(JLabel.BOTTOM); // 设置文字垂直对齐方式为底部 JPanel panel = new JPanel(); panel.add(label); Border border = BorderFactory.createEmptyBorder(2, 2, 2, 2); panel.setBorder(border); addMouseClickListener(panel, file.getAbsolutePath()); imageContainer.add(panel); } JScrollPane scrollPane = new JScrollPane(imageContainer, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); this.add(scrollPane); } private void addMouseClickListener(final JComponent component, String imagePath) { MouseAdapter mouseListener = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { JOptionPane.showMessageDialog(component.getParent(), "你选择了:" + new File(imagePath).getName(), "图片详情", JOptionPane.PLAIN_MESSAGE); // 如果需要弹出大图预览窗体或者其他操作可以在下方补充相应逻辑 } @Override public void mouseEntered(MouseEvent evt) { Border highlightedBorder = BorderFactory.createLineBorder(Color.GRAY, 2, true); ((JPanel) evt.getSource()).setBorder(highlightedBorder); } @Override public void mouseExited(MouseEvent evt) { Border defaultBorder = BorderFactory.createEmptyBorder(2, 2, 2, 2); ((JPanel) evt.getSource()).setBorder(defaultBorder); } }; component.addMouseListener(mouseListener); } }按照上述想法修改这段代码
03-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值