Tag: swing

不能将Swing组件添加到多个容器中?

我正在尝试(测试别的东西)将一个JButton引用添加到两个JPanels进行测试,它从添加到的第一个面板中消失了! 那么,不能将Swing组件添加到多个容器中吗? 先谢谢你。

当单元格中的JComboBox中存在ItemEvent时,如何获取CellRow

我有一个JTable,其中包含一个包含JComboBox的列。 我有一个附加到JComboBox的ItemListener,它对任何更改起作用。 但是,ItemListener没有获取已更改的ComboBox所在的Row的方法。 我需要行号以便在ComboBox发生更改时对同一行中的另一列进行操作。 任何帮助,将不胜感激。 这是我的简短代码。 我想要完成的是在itemlistener获取更改时获取ComboBox的表行。 import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.IOException; import javax.swing.*; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; public class Example extends JFrame { private static final long serialVersionUID = 1L; public static int maxX, maxY; public static final String[] columnHeads = {“Col 1”, “Col 2”, “Col 3”}; public static […]

哪种Swing组件方法是线程安全的?

根据Swing教程 : 一些Swing组件方法在API规范中标记为“线程安全”; 这些可以从任何线程安全地调用。 必须从事件派发线程调用所有其他Swing组件方法。 忽略此规则的程序可能在大多数情况下正常运行,但会遇到难以重现的不可预测的错误。 但是这些标记为“线程安全”的Swing组件方法是什么? 实际上有吗? 更新/赏金: 是否有完整的线程安全摆动方法列表 ? (线程安全的Swing方法似乎很少见,所以这样的列表不能太长……)

设置JDialog的最大大小?

简短的版本:我需要做一些棘手的工作来让JDialog的setMaximumSize()工作吗? 完整版:我有一个JDialog(布局管理器:BorderLayout),它包含一个滚动窗格和底部带有提交按钮的JPanel。 滚动窗格包含一个JPanel,它在系统的其他位置动态构建。 我想要的是对话框在JPanel周围动态resize到一定大小,然后开始增长滚动条。 这或多或少是默认情况下发生的事情,除了最大尺寸似乎是我的显示器的大小。 我认为这是从java.awt.Componentinheritance的.setMaximumSize()方法,但设置它似乎没有任何效果。 设置首选大小确实有效 – 但是无论如何,对话框总是那么大,这实际上不是我想要的。 (如果我在滚动窗格上设置最大/首选大小属性,效果是相同的。) 我错过了一些非常明显的东西吗? 是否有一些我不知道的古怪的JDialog / BorderLayout / MaximumSize交互?

在巨大的数据负载下对JTable行选择事件的延迟响应

我有一个Swing JTable动态更新了大量数据 – 不断添加新行,并且几分钟内可以添加1000-2000行。 我已经注册了一个Listener来响应使用的单行选择事件来执行一些工作人员。 我已经使用Observer模式进行Swing数据绑定,而表的模型由WritableList实现支持。 因此,新项目将从其自己的Realm添加到表中。 并且从SWT UI线程添加了Listener。 问题是,当新行添加到表时,它不会立即响应用户行选择事件。 只有在停止更新表格模型时,表格才会响应用户选择 – 有时会延迟30-60秒。 请帮助我解释为什么我的表模型在深度更新时不会立即响应用户选择,以及如何克服此限制。 任何建议将不胜感激。

使用大量行填充JTable

我想在运行时期间用很多行填充JTable(比方说10000)。 但我所有的尝试都非常糟糕且效率低下。 起点是addData方法,它获取表示行的对象列表。 我试图通过SwingWorker填充表格,但这仅适用于我的小数据。 另一种尝试是直接设置数据而不使用任何类型的线程,但这也非常慢,至少UI不像SwingWorker那样被阻止。 那你怎么做这个一般? 表应该逐行或逐行填充,但不能全部填充,垂直滚动条应同时滚动。 我的TableModel: public class MyTableModel extends AbstractTableModel { /** * */ private static final long serialVersionUID = 1L; String[] columnNames; public Map data = new LinkedHashMap(); public MyTableModel(String[] header) { columnNames = header; } public String getColumnName(int col) { return columnNames[col].toString(); } @Override public int getColumnCount() { return columnNames.length; […]

Java Swing中的MouseMotionListener,将其与组件内部的组件一起使用

我正在使用Swing中的Touch User界面。 虽然我知道这不是最佳的,但我的截止日期很短,没有时间使用触摸屏特定的GUI包(如果有的话)。 我希望我的用户能够在屏幕上“滑动”他们的手指,并且我制作的特殊JScrollPane的视图随之移动。 代码很简单 – public class PanScrollPane extends JScrollPane implements MouseMotionListener{ public PanScrollPane() { super(); this.addMouseMotionListener(this); } @Override public void mouseDragged(MouseEvent arg0) { System.out.println(“Mouse Dragged!”); } @Override public void mouseMoved(MouseEvent arg0) { System.out.println(“Mouse Moved!”); } 我遇到的问题是JScrollPane是各种JComponents的容器。 当我第一次开始研究这个时,我发现MouseMovedEvent和MouseDraggedEvent会向上传播’GUI树’,直到他们遇到一个带有专门针对该事件的侦听器的Component。 现在看来,我添加到panScrollPane的任何组件都会阻止任何这些MouseMotion事件,让我无法平移。 panScrollPane.add(new JButton(“This thing blocks any mouse motion events”)); 我想用手传播MouseEvent(将侦听器添加到每个组件,然后让它们将事件发送给它们的父组件)将起作用。 然而,这是一项非常耗时的工作,因为我宁愿把时间花在其他事情上,所以我想知道你是否知道任何解决这个问题的方法。 感谢您的阅读,并希望感谢您的回答! 🙂 编辑:让我的意图更清晰。 我只希望panPanel捕获mousemotion事件,任何其他事件(如MouseClick,MouseRelease)应该正常处理

用Java绘制一个简单的折线图

在我的程序中,我想绘制一个简单的分数线图。 我有一个文本文件,每行都是一个整数分数,我读入并希望作为参数传递给我的图形类。 我在实现图形类时遇到了一些麻烦,我见过的所有示例都将它们的方法与它们的主要方法放在同一个类中,我不会这样做。 我希望能够将我的数组传递给对象并生成一个图形,但是在调用我的paint方法时,它要求我使用Graphics g …这是我到目前为止所拥有的: public class Graph extends JPanel { public void paintGraph (Graphics g){ ArrayList scores = new ArrayList(10); Random r = new Random(); for (int i : scores){ i = r.nextInt(20); System.out.println(r); } int y1; int y2; for (int i = 0; i < scores.size(); i++){ y1 = scores.get(i); y2 = […]

SwingPropertyChangeSupport动态更新JTextArea

我正在尝试建立有关SwingPropertyChangeSupport的问题的答案 我试图在非常有用的Hovercraft Full Of Eels的答案中修改这里给出的代码: WindowListener不能按预期工作 ,以允许在通过输入对话框输入更改时更新显示的数组。 数组已更新,但未在GUI中刷新。 我希望有人能告诉我哪里出错了。 这是代码: import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.event.SwingPropertyChangeSupport; public class Main { public static void main(String[] arg) { GuiForUpdate display = new GuiForUpdate(); display.setVisible(true); } } class GuiForUpdate extends […]

个别且不连续的JTable的小区选择

是否有任何干净的方法允许用户选择JTable的多个非连续单元格? 或者我被迫实现自己的ListSelectionModel? 我在JTable上使用setCellSelectionEnabled()和setSelectionModel()方法,但我只能选择连续单元组。 编辑: 我试过@mKorbel不错的SSCCE。 它适用于列表,但似乎没有完全在表上工作。 这是一个SSCCE: import java.awt.Component; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; public class TableSelection extends JFrame{ String[] columnNames = {“First Name”, “Last Name”, “Sport”, “# of Years”, “Vegetarian”}; Object[][] data = { {“Kathy”, “Smith”, “Snowboarding”, new Integer(5), new Boolean(false)}, {“John”, “Doe”, “Rowing”, new Integer(3), new […]