当前位置: 首页 > 知识库问答 >
问题:

JavaSwing:整个ScrollBar的背景(不显示)

夏兴生
2023-03-14

我正在开发一个swing应用程序(让我们忽略为什么)。

我需要做一个自定义设计的滚动条。到目前为止还不错,我实现了我的ScrollBarUI后代-我有自定义按钮,自定义拇指,自定义轨道...除了按钮周围的区域-我在那里添加了一些填充,我想把我所有的滚动条包装成一个圆角矩形。

由于我在ScrollBarUI中没有找到这样做的方法,我决定扩展JScrollPane(扩展那里使用的ScrollBar,这样我就可以在paintComponent中绘制圆角矩形)。这是我做的:

public class MyScrollPane extends JScrollPane {
  public MyScrollPane(Component view) {
    super(view);
  }

  @Override
  public JScrollBar createVerticalScrollBar() {
    return new MyScrollBar(JScrollBar.VERTICAL);
  }

  @Override
  public JScrollBar createHorizontalScrollBar() {
    return new MyScrollBar(JScrollBar.HORIZONTAL);
  }

  protected class MyScrollBar extends ScrollBar {
    public MyScrollBar(int orientation) {
      super(orientation);
      setUI(MyScrollBarUI.createUI(this));
      setOpaque(true);
    }

    public void paintComponent(Graphics g) {
      super.paintComponent(g);

      Graphics2D g2 = (Graphics2D) g;

      int borderDiameterX = 32;
      int borderDiameterY = 32;
  
      g2.translate(this.getX(), this.getY());
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g2.setColor(Color.gray);
      g2.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 1, borderDiameterX, borderDiameterY);
      g2.translate(-this.getX(), -this.getY());
    }
  }
}

不幸的是,这不起作用:

  • 如果setOpacity(true)-它会在按钮周围绘制默认颜色的正方形

代码被调用,我检查过了。滚动条的内部元素-拇指、按钮都很好。

我错过了什么?

共有1个答案

阮昊阳
2023-03-14

好啊我的代码中有3个问题。

  1. setOpacity必须为false以防止内置背景绘图

所以现在看起来是这样的:

public class MyScrollPane extends JScrollPane {
  public MyScrollPane(Component view) {
    super(view);
  }

  @Override
  public JScrollBar createVerticalScrollBar() {
    return new MyScrollBar(JScrollBar.VERTICAL);
  }

  @Override
  public JScrollBar createHorizontalScrollBar() {
    return new MyScrollBar(JScrollBar.HORIZONTAL);
  }

  protected class MyScrollBar extends ScrollBar {
    public MyScrollBar(int orientation) {
      super(orientation);
      setUI(MyScrollBarUI.createUI(this));
      setOpaque(false);
    }

    public void paintComponent(Graphics g) {
      Graphics2D g2 = (Graphics2D) g;

      int borderDiameter = 32;

      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g2.setColor(Color.gray);
      g2.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 1, borderDiameter, borderDiameter);

      super.paintComponent(g);
    }
  }
}
 类似资料:
  • 嗨,我的wordpress网站有问题-我用这个css改变了页面的背景: . page-id-689#主{背景: url('http://www.gamekey.sk/wp-content/uploads/2015/09/thief-totalne.jpg')无重复中心!重要; -webkit背景尺寸:封面!重要的 -moz背景尺寸:封面!重要的 -o-背景-大小:封面!重要; } 问题是背景不会显

  •  背景,就是衬在文字和前景后面显示的东西。KAG 中(默认设定)的是读入 640×480 大小的背景图片。  首先,将想要显示的 640×480 的图片放进 bgimage 文件夹中。把图片命名为 bg0.jpg 。KAG 的 LZH 档里并没有包含背景图片,请自己准备一张吧(^^)  接着,把在 显示文字相关 里所使用的剧本档(first.ks)内容修改成以下这样。 [imagestorage=

  • 我试图创建一个工具栏,它使用了我在png文件中创建的背景。现在,当我在xml中使用背景时,android studio中的布局编辑器显示的结果正好是预期的。当我在虚拟设备中运行应用程序时,问题就来了。背景没有调整到工具栏,结果只显示了它的一部分。 虚拟设备:https://i.gyazo.com/5bbd9bf5a2df1727278ba9e78efd622b.png

  • 问题内容: 这是一个非常简单的程序,我已尽力而为,但JPanel并未提供背景图片。我只希望面板上有一个简单的背景图像。 这是我的代码: 提前致谢 问题答案: 更换 与

  • 因此,我正在编写一个程序,在这个程序中,我最终希望一个按钮在按下时改变颜色。到目前为止,我的困境是: -尽管切换了setOpaque()和setContentAreaFilled()的真/假,但我无法获取当前设置为显示背景色的JButton。在尝试添加ActionListener之前,我希望能够做到这一点。 -我想用类似于JToggleButton()的东西来改变颜色,但是我想用背景而不是图标来改

  • 我想让我的登录活动与背景关闭整个活动,包括手机本身的时钟像这样 这是我的密码 但我的输出是 我需要删除橙色条,使其与第一个图像相同。 我如何按照这种风格制作: