小编oli*_*olz的帖子

改变Nimbus LaF处理JTree节点突出显示的方式

尽管有Nimbus的弱点,我一直在努力将Java应用程序从WindowsLookAndFeel过渡到Nimbus,主要是成功的.我的用户总体上喜欢Nimbus LaF,但不喜欢一些细节,其中一些我通过咨询本网站上的问题而改变了.示例:我从Windows LaF(他们喜欢)复制了LeafIcon,ClosedIcon和OpenIcon,并在Nimbus版本中使用它们,以获得LaF的良好组合.

坚持最后一个(?)问题.

我有一个带有子类DefaultCellRenderer的JTree来创建适当的节点显示.这在WindowsLookAndFeel下工作正常.

问题:在WindowsLaF下,当选择节点时,节点的文本会突出显示,并且效果在视觉上易于理解.在Nimbus下选择一个节点时,突出显示是用一条(相当暗的)颜色条来完成的,它运行树窗的宽度(不仅仅是文本的宽度),效果令人不安.

所以:我只想在Nimbus LaF中使用WindowsLaF处理JTree节点突出显示(即彩色背景只有文本的宽度,最好是我可以选择的更好的颜色).我怀疑这意味着我需要将正确的排序画家分配给"Tree:TreeCell [Focused + Selected] .backgroundPainter",但我不知道如何编写它.

建议最受欢迎.


编辑

使用Java 7查看奇怪的选定节点突出显示!

在此输入图像描述

public class TreeBorder {
    public static void main( String[] args ) {
        try{
            for( UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels() ) {
                if( "Nimbus".equals( info.getName() ) ) {
                    UIManager.setLookAndFeel( info.getClassName() );
                    break;
                }
            }
        } catch( Exception e ) {
            e.printStackTrace();
        }
        SwingUtilities.invokeLater( new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setLocationRelativeTo( null );
                f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
                f.getContentPane().add( getJTree() );
                f.pack(); …
Run Code Online (Sandbox Code Playgroud)

java swing renderer jtree nimbus

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

Windows 9上的Java 9,带有大字体

如果在Windows上设置大字体(例如,125%,120 DPI),则看起来好像Swing of Java 9首先渲染为较小的图像,然后将此图像缩放到屏幕上.

文本仍然正确显示.但是1像素线是1像素或2像素强.对角线是阶梯式的.图标被栅格化.

是否有任何命令行参数或API来改变这种行为?


示例编辑:

使用MenuSelectionManagerDemo来自docs.oracle.com/javase/tutorial/uiswing/examples/components/

在此输入图像描述

java swing dpi java-9

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

如何设置JSplitPane-Divider折叠/展开状态?

我有一个带有JSplitPane的JFrame,它是OneTouchExpandable.我想记住JFlitPane在JFrame上的最后一个Divider位置处理,如果重新打开JFrame,则恢复Position.

它运行良好,但是如果用户通过oneTouchExpandable UI-Widget扩展一侧,那么我只存储处理中的'int'-Position并再次设置'int'-Position,结果是JFrame调整JSplitPane-Divider的大小跳转到折叠的Component preferredSize.

如何获取/设置崩溃/展开状态?

编辑

现在:调整大小行为是正常的,但它与第一​​次打开的行为不完全相同 - 因为现在我没有MinimumDividerLocation.我想要SnapIn,但需要进一步折叠状态.

public class SplitPaneState {
    public static void main( String[] args ) {
        SwingUtilities.invokeLater( new Runnable() {
            @Override
            public void run() {
                new SplitPaneState().createAndSowGUI();
            }
        });
    }

    private int position = -1;
    private Dimension size = new Dimension( 500, 300 );

    private void createAndSowGUI() {
        final JFrame frame = new JFrame("frame");
        frame.setSize( 200, 100 );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.setLocationRelativeTo( null );
        frame.getContentPane().add( new JButton( new AbstractAction(){
           {
               putValue( Action.NAME, "Open Dialog" ); …
Run Code Online (Sandbox Code Playgroud)

java swing jsplitpane

7
推荐指数
1
解决办法
1万
查看次数

HTML Select with disabled选项在FireFox中返回错误的selectedIndex

我有一个Select残疾Option谁是默认选择的一个:

<select name="select" size="1">
   <option>0</option>
   <option selected disabled>1</option>
   <option>2</option>
   <option>3</option>
   <option>4</option>
</select>
Run Code Online (Sandbox Code Playgroud)

如果我选择了它,它将返回1.一切还好.

但是如果我打开弹出窗口并将光标悬停在另一个上Option (例如'4')
ESC通过点击其他任何地方取消它.

Select输入显示旧值1,但返回上得到选择4.

jsfiddle的示例

Chrome仅FireFox(4/5)不会发生这种情况

html firefox drop-down-menu

7
推荐指数
1
解决办法
3642
查看次数

Nimbus TableHeader未突出显示为"已按下"

JTableHaeder默认没有"按下"突出显示.(雨云)

NimbusDefaults表示它有一个默认的[Pressed]背景画家.

当我点击TableHeader时,我该怎么办?

NimbusDefaultPainter


更新1

NimbusStyle.getExtendedState返回压在鼠标按下正确.但是NimbusStyle.getBackgroundPainter(SynthContext)返回null导致CacheKey "backgroundPainter $$实例"nullNimbusStyle.Values缓存中存在此状态.

有什么问题?


更新2

我的示例显示了一个JTableHeader和一个带有"Pressed Behavior"的JScrollBar.

对于JScrollBar,我putClientProperty( "Nimbus.State" )使用重绘问题.

public class Header extends JPanel{

    public Header() {
        super(new BorderLayout());
        JTableHeader header = new JTable(5, 3).getTableHeader();
        JScrollBar   scroll = new JScrollBar(JScrollBar.HORIZONTAL);
        add(header, BorderLayout.NORTH);
        add(scroll, BorderLayout.SOUTH);
        scroll.addMouseListener( new PressedBehavior() );
        header.addMouseListener( new PressedBehavior() );
    }

    static public void main( String[] s ) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
            SwingUtilities.invokeLater( new Runnable() {
                @Override
                public void run() …
Run Code Online (Sandbox Code Playgroud)

java swing look-and-feel nimbus jtableheader

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

HttpSessionListener - 会话超时时会调用sessionDestroyed方法吗?

我有一个实现,HttpSessionListener使用sessionDestroyed方法释放应用程序中的"锁定"资源.

"锁定"信息在数据库中维护,并且在大多数情况下锁的发布工作正常.但在某些情况下,我仍然看到资源被锁定 - 即使没有活动的会话!

所以,我怀疑是否有可能sessionDestroyed不被调用?假设会话超时 - 是否sessionDestroyed会调用方法?

假设用户关闭浏览器选项卡而不注销(销毁会话) - 那么是否会调用侦听器?

提前致谢!

java session servlets session-timeout java-ee

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

为什么TreeSet.contains()不起作用?

public class Empty {

    public static void main( String[] args ) {

        TreeSet<Class> classes = new TreeSet<Class>();
        classes.add( String.class );

        String test = new String();

        try{ 
            if( classes.contains(test.getClass()) ){
                System.out.println( "contains" );
            }
        }catch(ClassCastException cce){

            System.out.println( "Expected:  "  + classes );
            System.out.println( "But it was: " + test.getClass() );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这会抛出ClassCastException

java classcastexception treeset

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

对作为hashmap中的日期条目的键进行排序

我有一个hashMap,它具有以下值作为密钥value(sql date , integer)对:

a.put("31-05-2011",67);
a.put("01-06-2011",89);
a.put("10-06-2011",56);
a.put("25-05-2011",34);
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下键对hashMap进行排序时:Map modified_a = new TreeMap(a); 并按如下方式显示按键:

01-06-2011,10-06-2011,25-05-2011, 31-05-2011
Run Code Online (Sandbox Code Playgroud)

但我希望按键排序为

31-05-2011,25-05-2011,01-06-2011 ,10-06-2011
Run Code Online (Sandbox Code Playgroud)

我可以看到值是根据前2位数(这是日期值)进行排序的,但是我还要考虑月份值,并根据月份排序,然后按月对每个月进行排序.任何线索?

java sorting hashmap

5
推荐指数
3
解决办法
3万
查看次数

是否可能使GWT i18n中的消息方法过载

我有一个com.google.gwt.i18n.client.Messages可本地化的GWT项目的实现.

但似乎不可能重载方法.这是一个Bug还是有原因的?

public interface CommonMessages extends Messages {

    public static final CommonMessages INSTANCE = GWT.create( CommonMessages.class );

    @DefaultMessage( "The entered text \"{0}\" contains the illegal character(s) \"{1}\" ." )
    String textValidatorError( String o, String e );

    @DefaultMessage( "The entered text \"{0}\" contains illegal character(s)." )
    String textValidatorError( String o );
}
Run Code Online (Sandbox Code Playgroud)

提出来:

        Rebinding common.client.i18n.CommonMessages
 [java] Invoking generator com.google.gwt.i18n.rebind.LocalizableGenerator
 [java]    Processing interface common.client.i18n.CommonMessages
 [java]       Generating method body for textValidatorError()
 [java]          [ERROR] Argument 1 beyond range of arguments: The entered …
Run Code Online (Sandbox Code Playgroud)

java gwt overloading internationalization

5
推荐指数
0
解决办法
892
查看次数

如何在FireFox中更改悬停的Select-Option的颜色

我想更改FireFox中具有默认蓝色背景和白色前景的悬停Select-Option的颜色.

我试过了:

<select name="select" size="1">
   <option>0</option>
   <option class="test">1</option>
   <option>2</option>
   <option>3</option>
   <option>4</option>
</select>
Run Code Online (Sandbox Code Playgroud)

.test:hover {
    color:green;
    background-color:yellow;
    text-decoration:underline;
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.见例子.
FireFox特定解决方案就足够了.

html css hover drop-down-menu

5
推荐指数
2
解决办法
2万
查看次数