JScrollPane 和 JPanel

2023-12-02

所以,我正在制作一种文本编辑器,并且我需要一个 JScrollPane 来进行垂直导航。 但我无法让它发挥作用。

我已经阅读了谷歌结果前十页上的所有该死的教程,但我无法让它工作。

假设我有 JFrame(大小 1000x800)。我想在其中放置一个 JPanel (1000x2000),以便它与 JFrame 水平对齐。我想将一个简单的滚动条粘贴到 JPanel 的右侧,这样我就可以访问它的其余部分。

我缩小了尺寸,我将 JPanel 添加到 JScrollBar 中,反之亦然,将其中之一添加到 JFrame 中,两者都没有,但什么也没有。

所以,在这一点上,我不介意几行完成的代码......

编辑:好的,这是代码......

mWindow = new JFrame(lang.getString("title"));
mWindow.setSize(1000, 800);
mWindow.setLocationRelativeTo(null);
mWindow.setResizable(false);
mWindow.setLayout(null);
mWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

mWindow.setVisible(true);

workspace = new JPanel();
workspace.setBounds(0,0, 1000, 1203);
workspace.setBackground(Color.RED);

scroll = new JScrollPane(workspace, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setBounds(0, 20, 600, 600);
//scroll.setLayout(null);
mWindow.getContentPane().add(scroll);
mWindow.repaint();
mWindow.validate();

显示 JPanel 的一部分(600X600,(JScrollPane 大小)),并显示滚动条,但不可滚动


所以,我做了这个非常快速的测试,它对我来说效果很好......

public class TestPane extends JPanel {

    public TestPane() {

        setBorder(new LineBorder(Color.RED));
        // This is for demonstration purposes only
        // One should always rely on the layout manager
        // to define this value
        // Thank kleopatra 
        setPreferredSize(new Dimension(1000, 1000));

    }

    @Override
    protected void paintComponent(Graphics g) {

        super.paintComponent(g);

        FontMetrics fm = g.getFontMetrics();

        Dimension size = getPreferredSize();
        String text = "Pref: " + size.width + "x" + size.height;
        g.drawString(text, 0, fm.getAscent());

        size = getSize();
        text = "Size: " + size.width + "x" + size.height;
        g.drawString(text, 0, fm.getHeight() + fm.getAscent());

    }

}

和测试框架

public class TestFrame {

    public static void main(String args[]) {

        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());

        JScrollPane scroll = new JScrollPane(new TestPane());

        frame.add(scroll);

        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }

}

产生这个:

Scroll away

顺便说一句,我不知道为什么人们坚持使用空布局,它们只会造成更多的麻烦和心痛,而不是值得的。花时间找到一些简单的布局管理器。我讨厌 VB 有很多原因,但布局管理是我的首要考虑,恕我直言

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JScrollPane 和 JPanel 的相关文章

随机推荐

  • setContextProperty() 不会在 qml 文件中创建类实例

    The main py文件显示一个选项卡小部件 在每个选项卡上 我加载了一个特定的 qml 文件 但为了解决这个问题 我将只考虑一个 qml 文件和一个选项卡 import sys os math import numpy as np fr
  • 通过 Javascript 检测新的 Microsoft Edge v80 (Blink) 的正确方法是什么?

    由于最新版本的 Microsoft Edge 是out并使用 Blink 使用 javascript 区分旧边缘和新边缘的正确方法是什么 目前我计划研究一下navigator userAgent检查旧版本的 Edge 最多 18 个 con
  • requestInterstitialAdPresentation 只能运行一次

    我想知道为什么 self requestInterstitialAdPresentation 只能工作一次 我的意思是 我将此调用绑定到 UIButton 中 第一次运行我的应用程序 然后单击此按钮 广告会正确显示 但是 当我关闭广告并尝试
  • 如何确保运行代码时控制台不会立即关闭?

    我正在尝试学习 C 编程 但是当我运行代码时 cmd 窗口立即关闭 而没有给我更改以查看程序是否打印了我想要的结果 我正在 VS Code 上使用多个扩展对 C 进行编码 是否有设置 扩展 代码片段 或者我可以做些什么 使它不会立即关闭 T
  • C++ - 传递对 std::shared_ptr 或 boost::shared_ptr 的引用

    如果我有一个需要与shared ptr 将其传递给它的引用不是更有效吗 这样可以避免复制shared ptr目的 可能有哪些不良副作用 我设想两种可能的情况 1 在函数内部 由参数组成一个副本 如 ClassA take copy of s
  • 获取p标签的行高[重复]

    这个问题在这里已经有答案了 我想计算出一个的行高 p div 内的标签 var myp document getElementById myp var heightLabel document getElementById heightLa
  • 在 TextMate 问题中用反向引用替换

    我正在使用 TextMate 来替换表达式 my expression 由开括号和闭括号之间的字符组成 my expression 所以我尝试更换 by 1 正则表达式匹配正确的表达式 但替换给出 1 因此该变量不被识别 有人可以有想法吗
  • Google Chart:如何更改负值的颜色

    我目前有一个使用 GoogleCharts 的漂亮的 AreaChart 但是我试图在值为负时更改图表的颜色和背景颜色 根据我的发现 想法是仅显示一个区域用于正值 而另一个区域用于显示负值 以便我可以自定义颜色 然而你可以在下面看到我并没有
  • 当状态是对象数组时更新 React 状态

    我有一个处于状态的对象数组 this state items id 1 someattr a string anotherattr id 2 someattr another string anotherattr id 3 someattr
  • Android ViewPager 方向更改

    我读过 安东尼特的回答这个StackOverflow问题 that FragmentPagerAdapter将尝试重用通过以下方式找到的现有片段FragmentManager findFragmentByTag 方向改变后 我已经尝试过了
  • 具有固定行数和列数的集合视图

    我有一个集合视图 并且希望在多个设备上保持一致的行数和列数 在 iPhone 6s Plus 上 显示 6 个项目 但在 iPhone 5s 上查看应用程序时 仅显示 4 个项目 See my layout here 如何使集合视图在不同设
  • 为什么我会看到 VSCode 中的 let 语句中添加了“: String”?

    当我在 VSCode 中输入以下内容时 let mut guess String new 我看到它变成了 let mut guess String String new 为什么会发生这种情况 这些被称为镶嵌提示 rust analyzer
  • 稍后交付无法在 Rails 5 的测试环境中运行

    基本上 测试配置的设置与 Rails 4 中的工作方式完全相同 传递方法设置为测试等 除了我已替换的已弃用的选项之外 邮件仅使用 Deliver now 发送 而不是 Deliver later Deliver later 在开发环境中工作
  • 嵌入 UIHostingController 中的 NavigationView 具有额外的安全区域插图

    有人知道如何处理这个问题吗 似乎当您有一个带有 NavigationView 的 UIHostingController 时 会发生以下情况 注意大的灰色标签栏安全区域 这主要是一个 UIKit 应用程序 我们正在用 swiftUI 视图替
  • 大于行首的符号

    我刚刚在脚本中看到以下内容 但不确定它的含义 started STATUSDIR EVENT ID started errs STATUSDIR EVENT ID errors started is used to capture the
  • Python - time.sleep(n) 是 CPU 密集型的吗? [复制]

    这个问题在这里已经有答案了 我一直在考虑使用time sleep n 在 python 脚本中使其以不同的时间间隔执行作业 伪代码如下所示 total jobs next jobs to run next closest total job
  • 带输入参数的 MVC jquery ajax 调用

    当我在带有参数的控制器上调用操作时遇到问题 在控制器中我有以下操作 HttpPost public ActionResult UpdateData string month return Json new success true mess
  • org.apache.harmony.xml.ExpatParser$ParseException 的问题

    我的 SaxParser 实现有时会抛出 org apache harmony xml ExpatParser ParseException At line 1 column 0 no element found 例外 在下一次尝试中 效果
  • 执行标量之后:未设置对象引用等

    我应该添加什么代码来接受 WHERE 语句中的 null int numApprovals 0 string sql SELECT COUNT Type AS OpenforApproval FROM dbo LeaveRequest WH
  • JScrollPane 和 JPanel

    所以 我正在制作一种文本编辑器 并且我需要一个 JScrollPane 来进行垂直导航 但我无法让它发挥作用 我已经阅读了谷歌结果前十页上的所有该死的教程 但我无法让它工作 假设我有 JFrame 大小 1000x800 我想在其中放置一个