[英]Java Swing JPanel goes behind other panel instead of replacing it
[英]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 所示。我試圖用谷歌搜索我的問題,但沒有找到了與我的情況相匹配的解決方案。 我試圖將帶有內容的滾動窗格移動到另一個面板,但也沒有成功。 如果你有一個完整的其他解決方案導致相同的結果,我很開放。
提前致謝!
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.