簡體   English   中英

Java Swing JScrollPane 面板在其他面板之后

[英]Java Swing JScrollPane Panel is behind other Panels

我想為我編寫的程序創建一個帶有 swing 的 GUI。 我使用 eclipse 和 WindowBuilder。 我的目標是創建一個內部帶有面板的 JScrollPane。 此面板稍后應包含兩個或更多 JLabel 和一個 JButton。 它應該是什么樣子的示例(沒有標簽和按鈕,只有黑色的 JPanel)稍后提供圖片 3。我使用圖像編輯器創建了圖片。 后來我希望通過滾動可以看到一些面板(可能是 50 個)。 最后的代碼是來自構造函數的代碼。

現在我的問題:當我將 JScrollPane 添加到我的一個 JScrollPane 並僅添加一個 JScrollPane 以測試我的 JScrollPane 時,JPanel 在背景中,如圖 1 和圖 2 所示。我試圖用谷歌搜索我的問題,但沒有找到了與我的情況相匹配的解決方案。 我試圖將帶有內容的滾動窗格移動到另一個面板,但也沒有成功。 如果你有一個完整的其他解決方案導致相同的結果,我很開放。

提前致謝!

圖片1

圖二

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 1920, 1080);
        
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);
        
        JMenu actionMenuTab = new JMenu("Actions");
        menuBar.add(actionMenuTab);
        
        JMenuItem mntmNewMenuItem = new JMenuItem("Load Database");
        actionMenuTab.add(mntmNewMenuItem);
        
        JMenuItem mntmNewMenuItem_1 = new JMenuItem("Save Database");
        actionMenuTab.add(mntmNewMenuItem_1);
        
        JMenu mnNewMenu_1 = new JMenu("Export Evaluation");
        actionMenuTab.add(mnNewMenu_1);
        
        JMenuItem mntmNewMenuItem_2 = new JMenuItem("As .txt");
        mnNewMenu_1.add(mntmNewMenuItem_2);
        
        JMenuItem mntmNewMenuItem_3 = new JMenuItem("As .pdf");
        mnNewMenu_1.add(mntmNewMenuItem_3);
        
        JMenu filterOptionMenuTab = new JMenu("Filter Options");
        filterOptionMenuTab.setFont(new Font("Segoe UI", Font.PLAIN, 12));
        menuBar.add(filterOptionMenuTab);
        
        JMenuItem noFilterMenuItem = new JMenuItem("No Filter");
        filterOptionMenuTab.add(noFilterMenuItem);
        
        JMenu byTextMenu = new JMenu("By Text");
        filterOptionMenuTab.add(byTextMenu);
        
        JMenuItem byTextExactMenuItem = new JMenuItem("Exact");
        byTextMenu.add(byTextExactMenuItem);
        
        JMenuItem byTextRegexMenuItem = new JMenuItem("Regex");
        byTextMenu.add(byTextRegexMenuItem);
        
        JMenu sortingMenuTab = new JMenu("Sorting");
        menuBar.add(sortingMenuTab);
        
        JMenu byHitsMenu = new JMenu("By Hits");
        sortingMenuTab.add(byHitsMenu);
        
        JMenuItem byHitsMostFirstMenuItem = new JMenuItem("most first");
        byHitsMenu.add(byHitsMostFirstMenuItem);
        
        JMenuItem byHitsLeastFirstMenuItem = new JMenuItem("least first");
        byHitsMenu.add(byHitsLeastFirstMenuItem);
        
        JMenu alphabeticalMenu = new JMenu("Alphabetical");
        sortingMenuTab.add(alphabeticalMenu);
        
        JMenuItem alphabeticalAscendingMenuItem = new JMenuItem("ascending");
        alphabeticalMenu.add(alphabeticalAscendingMenuItem);
        windowPanel = new JPanel();
        windowPanel.setBorder(new EmptyBorder(5, 5, 5, 5));

        setContentPane(windowPanel);
        windowPanel.setLayout(null);
        
        JPanel mainPanel = new JPanel();
        mainPanel.setBackground(new Color(128, 128, 128));
        mainPanel.setBounds(10, 11, 1884, 997);
        windowPanel.add(mainPanel);
        mainPanel.setLayout(null);
        
        JPanel filterSettingsPanel = new JPanel();
        filterSettingsPanel.setBackground(new Color(192, 192, 200));
        filterSettingsPanel.setBounds(46, 39, 1789, 87);
        mainPanel.add(filterSettingsPanel);
        filterSettingsPanel.setLayout(null);
        
        JPanel panel = new JPanel();
        panel.setBounds(10, 21, 1769, 50);
        filterSettingsPanel.add(panel);
        panel.setLayout(null);
        
        JLabel lblNewLabel = new JLabel("Filter Key:");
        lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 20));
        lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
        lblNewLabel.setBounds(0, 0, 148, 50);
        panel.add(lblNewLabel);
        
        filterKeyTextField = new JTextField();
        filterKeyTextField.setToolTipText("Here you can enter an url, string or number depending on your filter option.");
        filterKeyTextField.setText("www.example.de");
        filterKeyTextField.setFont(new Font("Tahoma", Font.PLAIN, 20));
        filterKeyTextField.setBounds(147, 0, 1125, 50);
        panel.add(filterKeyTextField);
        filterKeyTextField.setColumns(10);
        
        JLabel lblNewLabel_1 = new JLabel("Current Filter Option:");
        lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 20));
        lblNewLabel_1.setBounds(1282, 0, 189, 50);
        panel.add(lblNewLabel_1);
        
        JLabel currentFilterOptionLabel = new JLabel("No Filter");
        currentFilterOptionLabel.setFont(new Font("Tahoma", Font.PLAIN, 20));
        currentFilterOptionLabel.setBounds(1481, 0, 165, 50);
        panel.add(currentFilterOptionLabel);
        
        JButton filterButton = new JButton("Filter");
        filterButton.setFont(new Font("Tahoma", Font.PLAIN, 20));
        filterButton.setBounds(1645, 0, 124, 50);
        panel.add(filterButton);
        
        JPanel filterResultPanel = new JPanel();
        filterResultPanel.setBackground(new Color(192, 192, 192));
        filterResultPanel.setBounds(46, 137, 1789, 849);
        mainPanel.add(filterResultPanel);
        filterResultPanel.setLayout(null);
        
        
        
        JPanel legendPanel = new JPanel();
        legendPanel.setBounds(10, 0, 1769, 30);
        filterResultPanel.add(legendPanel);
        legendPanel.setLayout(null);
        
        JLabel lblNewLabel_2 = new JLabel("URL");
        lblNewLabel_2.setFont(new Font("Tahoma", Font.PLAIN, 20));
        lblNewLabel_2.setHorizontalAlignment(SwingConstants.CENTER);
        lblNewLabel_2.setBounds(10, 0, 1200, 30);
        legendPanel.add(lblNewLabel_2);
        
        JLabel legendHitsLabel = new JLabel("Hits");
        legendHitsLabel.setHorizontalAlignment(SwingConstants.CENTER);
        legendHitsLabel.setFont(new Font("Tahoma", Font.PLAIN, 20));
        legendHitsLabel.setBounds(1200, 0, 200, 30);
        legendPanel.add(legendHitsLabel);
        
        JPanel filterResultWindowPanel = new JPanel();
        filterResultWindowPanel.setBackground(SystemColor.controlHighlight);
        filterResultWindowPanel.setBounds(0, 41, 1789, 808);
        filterResultPanel.add(filterResultWindowPanel);
        filterResultWindowPanel.setLayout(null);
        
        JPanel resultViewPanel = new JPanel();
        resultViewPanel.setBounds(10, 11, 1769, 752);
        filterResultWindowPanel.add(resultViewPanel);
        resultViewPanel.setLayout(null);
        
        
        JScrollPane resultViewJScrollPane = new JScrollPane();
        resultViewJScrollPane.setBounds(0, 0, 1769, 752);
        
        resultViewPanel.add(resultViewJScrollPane);
        
        JPanel testPanel = new JPanel();
        testPanel.setBackground(SystemColor.black);
        testPanel.setBounds(0,0,1000,200);
        resultViewJScrollPane.add(testPanel);
        testPanel.setLayout(null);
        
        JLabel lblNewLabel_3 = new JLabel("Test");
        lblNewLabel_3.setBounds(0, 0, 96, 56);
        testPanel.add(lblNewLabel_3);
        
        
     ```

在這里總結一下我的問題的答案:首先我需要使用 resultViewJScrollPane.setViewportView(resultViewPanel) 而不是resultViewJScrollPane.add(resultViewPanel)

其次要讓它真正可滾動,我需要 resultViewPanel.setPreferredSize(new Dimension(752, 5000))。 錯誤的方法是resultViewPanel.setSize(new Dimension(752, 5000))

但正如一條評論所說,我需要這樣做,因為我的布局都是 null 並且不建議這樣做,因為 Layoutmanager 應該處理這個而不是硬編碼它。

我希望這個總結可以幫助每個有同樣問題的人

謝謝大家的幫助,現在它可以工作了,我喜歡它:D 這里有點味道:

結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM