有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将滚动条设置为滚动窗格中的“始终打开”

我有两个滚动窗格,我试图设置滚动条始终可见。由于某种原因,当我尝试使用下面的代码(滚动代码)时,我得到一个错误,“类型JTextPane的方法setHorizontalScrollBarPolicy(int)未定义”。有什么建议吗

滚动代码:

scrollPane.setHorizontalScrollBarPolicy(
   JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(
   JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

创建滚动窗格的代码:

JPanel ScrollPanes = new JPanel();
frame.getContentPane().add(ScrollPanes, BorderLayout.CENTER);
ScrollPanes.setLayout(new GridLayout(0, 2, 0, 0));

JTextPane textPane_0 = new JTextPane();
ScrollPanes.add(textPane_0);
textPane_0.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
textPane_0.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

JTextPane textPane_1 = new JTextPane();
ScrollPanes.add(textPane_1);

完整代码:

package swing;

import java.awt.EventQueue;

public class Swing {

    private JFrame frame;
    private JTextField textField;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Swing window = new Swing();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public Swing() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 600, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel TopApps = new JPanel();
        frame.getContentPane().add(TopApps, BorderLayout.NORTH);
        TopApps.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));


        JComboBox comboBox = new JComboBox();
        comboBox.setPreferredSize(new Dimension(100, 20));
        TopApps.add(comboBox);

        textField = new JTextField();
        TopApps.add(textField);
        textField.setColumns(20);

        JScrollPane scrollPanes = new JScrollPane();
        frame.getContentPane().add(scrollPanes, BorderLayout.CENTER);
        scrollPanes.setLayout(new GridLayout(0, 2, 0, 0));

        JTextPane textPane_0 = new JTextPane();
        scrollPanes.add(textPane_0);
        textPane_0.setBorder(BorderFactory.createLoweredBevelBorder());
        scrollPanes.setHorizontalScrollBarPolicy(
                JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            scrollPanes.setVerticalScrollBarPolicy(
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        JTextPane textPane_1 = new JTextPane();
        scrollPanes.add(textPane_1);
        textPane_1.setBorder(BorderFactory.createLoweredBevelBorder());
        scrollPanes.setHorizontalScrollBarPolicy(
                JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            scrollPanes.setVerticalScrollBarPolicy(
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        JPanel bottomPanel = new JPanel();
        frame.getContentPane().add(bottomPanel, BorderLayout.SOUTH);
        bottomPanel.setLayout(new GridLayout(2, 1, 5, 0));
        bottomPanel.setBorder(BorderFactory.createLoweredBevelBorder());

        JTextPane bText = new JTextPane();
        bottomPanel.add(bText);
        bText.setBorder(BorderFactory.createLoweredBevelBorder());

        JLabel status = new JLabel("Status");
        bottomPanel.add(status);
        status.setHorizontalAlignment(JLabel.CENTER);

    }

}

共 (2) 个答案

  1. # 1 楼答案

    textPane_0JTextPane而不是JScrollPane的实例,因此它没有setHorizontalScrollBarPolicy方法

    您可能想将textPane_0textPane_1包装在JScrollPane的新实例中,设置其滚动条属性并将其添加到框架中

    换句话说,使用

    JTextPane textPane_0 = new JTextPane();
    JScrollPane jScrollPane1 = new JScrollPane(textPane_0);//warp text pane
    //and set properties of wrapper
    jScrollPane1.setHorizontalScrollBarPolicy(
            JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    jScrollPane1.setVerticalScrollBarPolicy(
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    ScrollPanes.add(jScrollPane1);
    
    
    JTextPane textPane_1 = new JTextPane();
    JScrollPane jScrollPane2 = new JScrollPane(textPane_1);
    jScrollPane2.setHorizontalScrollBarPolicy(
            JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    jScrollPane2.setVerticalScrollBarPolicy(
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    ScrollPanes.add(jScrollPane2);
    

    演示:

    class Demo {
        public static void main(String[] args) {
    
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(500,400);
    
            JPanel ScrollPanes = new JPanel();
            frame.getContentPane().add(ScrollPanes, BorderLayout.CENTER);
            ScrollPanes.setLayout(new GridLayout(0, 2, 0, 0));
    
            JTextPane textPane_0 = new JTextPane();
            JScrollPane jScrollPane1 = new JScrollPane(textPane_0);
            jScrollPane1.setHorizontalScrollBarPolicy(
                    JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            jScrollPane1.setVerticalScrollBarPolicy(
                    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            ScrollPanes.add(jScrollPane1);
    
    
            JTextPane textPane_1 = new JTextPane();
            JScrollPane jScrollPane2 = new JScrollPane(textPane_1);
            jScrollPane2.setHorizontalScrollBarPolicy(
                    JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            jScrollPane2.setVerticalScrollBarPolicy(
                    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            ScrollPanes.add(jScrollPane2);
    
    
            frame.setVisible(true);
    
    
        }
    }
    
  2. # 2 楼答案

    JPanel ScrollPanes = new JPanel();
    

    应该是:

    JScrollPane ScrollPanes = new JScrollPane();
    

    或者更好,使用正确的命名法:

    JScrollPane scrollPanes = new JScrollPane();
    

    然后改变:

    textPane_0.setHorizontalScrollBarPolicy(
        JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    textPane_0.setVerticalScrollBarPolicy(
        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    

    致:

    scrollPanes.setHorizontalScrollBarPolicy(
        JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scrollPanes.setVerticalScrollBarPolicy(
        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);