Java – JPanel in jtabbar is not scrollable
•
Java
Enter the code here. I have the following questions
I added two jpanels to a panel and finally added it to my tabbedpane However, I want it to scroll, so I just make the panel scrollable, just add my scroll bar in the middle of the bar
Here is my example:
public class Test extends JFrame { private static final long serialVersionUID = -4682396888922360841L; private JMenuBar menuBar; private JMenu mAbout; private JMenu mMain; private JTabbedPane tabbedPane; public SettingsTab settings = new SettingsTab(); private void addMenuBar() { menuBar = new JMenuBar(); mMain = new JMenu("Main"); mAbout = new JMenu("About"); menuBar.add(mMain); menuBar.add(mAbout); setJMenuBar(menuBar); } public void createTabBar() { tabbedPane = new JTabbedPane(JTabbedPane.TOP); JComponent panel2 = new JPanel(); tabbedPane.addTab("Test1",null,panel2,"Displays the results"); tabbedPane.addTab("Settings",settings.createLayout()); add(tabbedPane); tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); } private void makeLayout() { setTitle("Test"); setLayout(new BorderLayout()); setPreferredSize(new Dimension(1000,500)); addMenuBar(); createTabBar(); setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public void start() { javax.swing.SwingUtilities.invokelater(new Runnable() { public void run() { makeLayout(); } }); } public static void main(String[] args) { Test gui = new test(); gui.start(); } public class SettingsTab extends JPanel { public JPanel createLayout() { JPanel panel = new JPanel(); panel.setLayout(new @R_184_2419@Layout(panel,@R_184_2419@Layout.Y_AXIS)); panel.add(table1()); panel.add(@R_184_2419@.createRigidArea(new Dimension(0,10))); panel.add(table2()); panel.add(@R_184_2419@.createRigidArea(new Dimension(0,10))); panel.add(new JScrollBar()); return panel; } public JPanel table1() { JPanel panel1 = new JPanel(); String[] columnNames = {"First Name","Last Name"}; Object[][] data = {{"Kathy","Smith"},{"John","Doe"},{"Sue","Black"},{"Jane","White"},{"Joe","Brown"} }; final JTable table = new JTable(data,columnNames); panel1.add(table); panel1.setLayout(new @R_184_2419@Layout(panel1,@R_184_2419@Layout.Y_AXIS)); return panel1; } public JPanel table2() { JPanel panel1 = new JPanel(); String[] columnNames = {"First Name","Last Name"}; Object[][] data = { {"Kathy",columnNames); table.setPreferredScrollableViewportSize(new Dimension(500,70)); table.setFillsViewportHeight(true); panel1.add(table); panel1.setLayout(new @R_184_2419@Layout(panel1,@R_184_2419@Layout.Y_AXIS)); return panel1; } } }
What do I suggest? Did I do wrong?
Thank you for your reply!
UPDATE
I tried it with JScrollPane, but it still didn't work:
public class Test extends JFrame { private static final long serialVersionUID = -4682396888922360841L; private JMenuBar menuBar; private JMenu mAbout; private JMenu mMain; private JTabbedPane tabbedPane; public SettingsTab settings = new SettingsTab(); private void addMenuBar() { menuBar = new JMenuBar(); mMain = new JMenu("Main"); mAbout = new JMenu("About"); menuBar.add(mMain); menuBar.add(mAbout); setJMenuBar(menuBar); } public void createTabBar() { tabbedPane = new JTabbedPane(JTabbedPane.TOP); JComponent panel2 = new JPanel(); tabbedPane.addTab("Test1","Displays the results"); tabbedPane.addTab("Settings",settings.createLayout()); add(tabbedPane); tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); } private void makeLayout() { setTitle("Test"); setLayout(new BorderLayout()); setPreferredSize(new Dimension(1000,500)); addMenuBar(); createTabBar(); setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public void start() { javax.swing.SwingUtilities.invokelater(new Runnable() { public void run() { makeLayout(); } }); } public static void main(String[] args) { Test gui = new test(); gui.start(); } public class SettingsTab extends JScrollPane { public JPanel createLayout() { JPanel panel = new JPanel(); panel.setLayout(new @R_184_2419@Layout(panel,@R_184_2419@Layout.Y_AXIS)); panel.add(table1()); panel.add(@R_184_2419@.createRigidArea(new Dimension(0,10))); panel.add(table3()); panel.add(@R_184_2419@.createRigidArea(new Dimension(0,10))); add(new JScrollPane()); return panel; } public JPanel table1() { JPanel panel1 = new JPanel(); String[] columnNames = {"First Name","Last Name"}; Object[][] data = { {"Kathy","Brown"},"Brown"} }; final JTable table = new JTable(data,columnNames); panel1.add(table); panel1.setLayout(new @R_184_2419@Layout(panel1,@R_184_2419@Layout.Y_AXIS)); return panel1; } public JPanel table2() { JPanel panel1 = new JPanel(); String[] columnNames = {"First Name",70)); table.setFillsViewportHeight(true); panel1.add(table); panel1.setLayout(new @R_184_2419@Layout(panel1,@R_184_2419@Layout.Y_AXIS)); return panel1; } public JPanel table3() { JPanel panel1 = new JPanel(); String[] columnNames = {"First Name",@R_184_2419@Layout.Y_AXIS)); return panel1; } } }
Solution
If this is what you need
Then you can do something like this:
public JScrollPane createLayout() { JPanel panel = new JPanel(); JScrollPane sp = new JScrollPane(panel); sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); // or ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED panel.setLayout(new @R_184_2419@Layout(panel,@R_184_2419@Layout.Y_AXIS)); panel.add(table1()); panel.add(@R_184_2419@.createRigidArea(new Dimension(0,10))); panel.add(table2()); panel.add(@R_184_2419@.createRigidArea(new Dimension(0,10))); return sp; }
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码