【问题标题】:jtree high DPI does not scalejtree 高 DPI 无法缩放
【发布时间】:2016-12-17 16:02:58
【问题描述】:

我有一个使用 JTree 的 java swing 应用程序。
我最近搬到了 UHD 显示器,现在 JTree 不能很好地扩展。
我感觉它使用图标来缩放行高,但不知道如何影响自己。
请注意,如果 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 被遗漏,在新显示器上它会小得难以阅读。
请参阅下面的屏幕截图/简单示例代码。

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTree;
import javax.swing.UIManager;

public class JTreeTest extends JFrame
{

   private JPanel contentPane;

   /**
    * Launch the application.
    */
   public static void main(String[] args)
   {
      EventQueue.invokeLater(new Runnable()
      {
         public void run()
         {
            try {
               // Set System L&F
               UIManager.setLookAndFeel(
                     UIManager.getSystemLookAndFeelClassName());
               JTreeTest frame = new JTreeTest();
               frame.setVisible(true);
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      });
   }

   /**
    * Create the frame.
    */
   public JTreeTest()
   {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setBounds(100, 100, 450, 300);
      contentPane = new JPanel();
      contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
      contentPane.setLayout(new BorderLayout(0, 0));
      setContentPane(contentPane);

      JTree tree = new JTree();
      contentPane.add(tree, BorderLayout.CENTER);
   }

}

普通分辨率jtree截图:

超高清分辨率jtree截图:

谢谢。

【问题讨论】:

    标签: java swing jtree


    【解决方案1】:

    也许你需要使用JTree#setRowHeight(int)

    public void setRowHeight(int rowHeight)

    设置每个单元格的高度,以像素为单位。如果指定的值小于或等于零,则查询当前单元格渲染器以获取每行的高度。

    import java.awt.*;
    import javax.swing.*;
    
    public class JTreeTest2 extends JFrame
    {
      private JPanel contentPane;
    
      /**
       * Launch the application.
       */
      public static void main(String[] args)
      {
        EventQueue.invokeLater(new Runnable()
        {
          public void run()
          {
            try
            {
              // Set System L&F
              UIManager.setLookAndFeel(
                UIManager.getSystemLookAndFeelClassName());
              JFrame frame = new JTreeTest2();
              frame.setVisible(true);
            }
            catch (Exception e)
            {
              e.printStackTrace();
            }
          }
        });
      }
    
      /**
       * Create the frame.
       */
      public JTreeTest2()
      {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        contentPane = new JPanel();
        contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
    
        JTree tree = new JTree();
        tree.setFont(tree.getFont().deriveFont(32f));
    
        JTree tree2 = new JTree();
        tree2.setFont(tree2.getFont().deriveFont(32f));
        tree2.setRowHeight(32);
        //or: tree2.setRowHeight(0);
    
        JPanel p = new JPanel(new GridLayout(1, 0));
        p.add(new JScrollPane(tree));
        p.add(new JScrollPane(tree2));
    
        contentPane.add(p, BorderLayout.CENTER);
        setBounds(100, 100, 450, 300);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 2020-05-18
      • 2018-08-07
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      相关资源
      最近更新 更多