我列出了一些带有图标的文件名(如Windows资源管理器中的那些)JTable.如果我有File来自本地文件系统的对象,我知道获取图标的两种方法:
javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon( file )
Run Code Online (Sandbox Code Playgroud)
对于16x16图标或更大的图标:
sun.awt.shell.ShellFolder.getShellFolder( file ).getIcon( true ) )
Run Code Online (Sandbox Code Playgroud)
由于我的文件存储在数据库中,因此我没有该File对象.我的解决方法是创建具有特定文件扩展名的临时文件,使用上述两种方法之一并缓存图标以在CellRenderer中显示它.
我搜索了没有临时文件的解决方案,发现了两个我不喜欢的解决方案:
org.eclipse.swt.program.Program.findProgram(String extension).getImageData(),但我不想使用SWTorg.jdesktop.jdic.icons.IconService来自JDIC项目的孵化器.最近的变化是IconService在6年前,在JDIC 2年前,我找不到一个可下载的jar.还有其他解决方案吗?
如果我JFrame通过单击Windows WindowDecoration的最小化按钮并通过Alt-Tabbing最小化它或在Windows任务栏中单击它来最小化Aero-snapped到屏幕左侧,那么框架将正确地恢复到左侧.好!
但是,如果我最小化帧
setExtendedState( getExtendedState() | Frame.ICONIFIED );
Run Code Online (Sandbox Code Playgroud)
并通过将鼠标悬停在Windows TaskBar上来查看预览,它会将框架显示错误的位置.通过Alt-Tabbing取消最小化或在Windows任务栏中单击它后,框架将在此错误的位置和大小恢复.帧边界是"未绑定"值,如果您将帧拖离ScreenBorder,Windows通常会记住恢复该值.
Bug的屏幕录制:
我的结论是,Java不了解AeroSnap并向Windows提供了错误的界限.(例如,Toolkit.getDefaultToolkit().isFrameStateSupported( Frame.MAXIMIZED_VERT ) );返回false.)
这是我对bug的修复:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Point;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
/**
* Fix for the "Frame does not know the AeroSnap feature of Windows"-Bug.
*
* @author bobndrew 20160106
*/
public class SwingFrameStateWindowsAeroSnapBug extends JFrame
{
Point location = null;
Dimension size = null;
public SwingFrameStateWindowsAeroSnapBug( final String title )
{
super( title ); …Run Code Online (Sandbox Code Playgroud) 我在JScrollPane的Viewport中使用第二个JTable来为主表构建RowHeader.主表上的DragAndDrop已禁用.在rowheader表上启用DnD.
如果用户启动了rowheader上的Drag,我想在主表上扩展绘制的rowheader下划线(图像中的黑线)(如图中的绿线).

有人对我有建议吗?
这是SSCCE:
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.DropMode;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.TransferHandler;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
public class DNDLinePainterExampleMain extends JFrame {
public DNDLinePainterExampleMain() {
JTable mainTable = new JTable(4, 3);
mainTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JTable rowTable = new RowHeaderTable(mainTable);
rowTable.setAutoscrolls(true);
rowTable.setDragEnabled(true);
rowTable.setTransferHandler(new RowHeaderTransferHandler());
rowTable.setDropMode(DropMode.INSERT_ROWS);
JScrollPane scrollPane = new JScrollPane(mainTable);
scrollPane.setRowHeaderView(rowTable);
scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER,
rowTable.getTableHeader()); …Run Code Online (Sandbox Code Playgroud) 在javaFX应用程序中包装swing组件的能力似乎已经从javaFX 2中消失了:
javafx.ext.swing.SwingComponent
在javaFX 2 beta API中没有更多.
还有办法在新API中执行此操作吗?
当我使用JXTable渲染和编辑我的数据时,CellEditors的一些输入会丢失.如果我单击JXTable-ColumnHeader的Resizing-Divider或更改JFrame的宽度,CellEditor将终止而不提交值.如果我使用JTable,则保存这些值.
我想使用JXTable因为它的其他功能,所以有没有办法修复JXTable?

例:
package table.columnresize;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import org.jdesktop.swingx.JXTable;
/**
* Demo of differing behaviour of JXTable and JTable. JXTable loses input in a TableCell where JTable persists
* it.
* <p>
* <table border=1>
* <tr>
* <th></th>
* <th>JXTable</th>
* <th>JTable</th>
* </tr>
* <tr>
* <td>Click on TableColumnHeader</td>
* <td>saved</td>
* <td>saved</td>
* </tr>
* <tr>
* <td>Resizing with Divider of TableColumnHeader</td>
* <td>lost</td>
* <td>saved</td>
* </tr>
* <tr>
* …Run Code Online (Sandbox Code Playgroud) 我使用SwingX AutoCompleteDecorator的JComboBox.自动完成功能非常有效......
但是我很难确定最终用户选择的时刻 ; 很少坚持我的数据.
让我试着解释一下:组合框会ActionEvent为每个选择发出一个"comboBoxChanged" .当用户输入字符时,我必须忽略这些事件,并且组合框是自动匹配和选择项目.如果用户点击返回键,ActionEvent则生成"comboBoxEdited" - 我可以保存所选值.太棒了;-)
如果使用鼠标打开JComboBox-PopUp并选择项目,则唯一触发的事件是"comboBoxChanged" - ActionEvent(如自动匹配或使用光标键选择项目时).鼠标点击事件以某种方式被消耗!?这就是我无法识别最终鼠标选择的原因.
我怎么能搞清楚这一点?我在SSCCE中记录了尝试监听mouseClicked-Event的失败尝试:
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;
public class SearchForThePopUpMouseClick extends JPanel
{
private JComboBox<String> comboBox;
public SearchForThePopUpMouseClick()
{
comboBox = new JComboBox<String>(new String[] { "Anna", "Marc", "Maria", "Marten", "Peter" });
add(comboBox);
add(new JTextField("textfield …Run Code Online (Sandbox Code Playgroud) 我们有以下两个具有多对多关联的实体:
@Entity
public class Role {
...
@ManyToMany
@JoinTable( name = "user_has_role", joinColumns = { @JoinColumn( name = "role_fk" ) }, inverseJoinColumns = { @JoinColumn( name = "user_fk" ) } )
private Set<User> userCollection;
...
}
Run Code Online (Sandbox Code Playgroud)
和
@Entity
public class User {
...
//bi-directional many-to-many association to Role
@ManyToMany( mappedBy = "userCollection" )
private Set<Role> roleCollection;
...
}
Run Code Online (Sandbox Code Playgroud)
如果我们想要截断所有数据
em.createQuery( "DELETE Role" ).executeUpdate();
Run Code Online (Sandbox Code Playgroud)
我们必须清除"user_has_role"JoinTable中的所有关联,如下面的答案所示:
for ( ... )
{
A a = aDao.getObject(aId);
B b = bDao.getObject(bId);
b.getAs().remove(a); …Run Code Online (Sandbox Code Playgroud) 使用JCheckBox作为JTable列中的编辑器,我想忽略TableCell中CheckBox左右两侧的鼠标点击.
我在2011年的Oracle论坛上找到了一个讨论,但问题没有在那里解决:https://community.oracle.com/thread/2183210
这是我到目前为止所实现的黑客攻击,有趣的部分开始于class CheckBoxEditor:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
/**
* Trying to set the Checkbox only if clicked directly on the box of the CheckBox. And ignore clicks on the
* remaining space of the TableCell.
*
* @author bobndrew
*/
public class JustCheckOnCheckboxTable extends JPanel
{
private static final int …Run Code Online (Sandbox Code Playgroud)