小编bob*_*rew的帖子

如何在不创建临时文件的情况下获取文件扩展名或文件类型的图标?

我列出了一些带有图标的文件名(如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(),但我不想使用SWT
  • org.jdesktop.jdic.icons.IconService来自JDIC项目的孵化器.最近的变化是IconService在6年前,在JDIC 2年前,我找不到一个可下载的jar.

还有其他解决方案吗?

java desktop icons swing file

28
推荐指数
1
解决办法
6733
查看次数

这是教授Java框架有关Windows的Aero Snap功能的唯一方法吗?

如果我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)

java swing minimize jframe aero-snap

28
推荐指数
1
解决办法
925
查看次数

如何在DragAndDrop期间在Main-JTable上绘制RowHeader-JTable的Dropline?

我在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)

java user-interface swing drag-and-drop jtable

13
推荐指数
4
解决办法
1717
查看次数

如何在javaFX 2.0应用程序中包装swing组件

在javaFX应用程序中包装swing组件的能力似乎已经从javaFX 2中消失了:

javafx.ext.swing.SwingComponent

在javaFX 2 beta API中没有更多.

还有办法在新API中执行此操作吗?

java swing javafx javafx-2 javafx-8

9
推荐指数
2
解决办法
6998
查看次数

为什么JXTable在JTable不存在的情况下输入输入?

当我使用JXTable渲染和编辑我的数据时,CellEditors的一些输入会丢失.如果我单击JXTable-ColumnHeader的Resizing-Divider或更改JFrame的宽度,CellEditor将终止而不提交值.如果我使用JTable,则保存这些值.

我想使用JXTable因为它的其他功能,所以有没有办法修复JXTable?

Screenrecording

例:

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)

java swing jtable swingx jxtable

8
推荐指数
1
解决办法
256
查看次数

如何知道是否点击了自动完成装饰的JComboBox的项目?

我使用SwingX AutoCompleteDecoratorJComboBox.自动完成功能非常有效......

但是我很难确定最终用户选择的时刻 ; 很少坚持我的数据.

让我试着解释一下:组合框会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)

java swing autocomplete swingx jcombobox

6
推荐指数
1
解决办法
1685
查看次数

如何一次删除Hibernate JoinTable中的所有关联?

我们有以下两个具有多对多关联的实体:

@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)

java many-to-many hibernate jointable

5
推荐指数
1
解决办法
2660
查看次数

如何识别JTable中JCheckBox的直接点击?

使用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)

java swing jtable tablecelleditor jcheckbox

5
推荐指数
1
解决办法
2113
查看次数