GVKun编程网logo

滚动JPanel(滚动的天空)

15

本篇文章给大家谈谈滚动JPanel,以及滚动的天空的知识点,同时本文还将给你拓展javaswing中滚动条添加到JPanel后添加到JFrame中滚动条不可见了?、java–JPanel周围的数字;J

本篇文章给大家谈谈滚动JPanel,以及滚动的天空的知识点,同时本文还将给你拓展java swing 中滚动条添加到 JPanel 后添加到 JFrame 中滚动条不可见了?、java – JPanel周围的数字; JPanel边界?、java – JTabBar中的JPanel不可滚动、java – 什么是JPanel,JFrame,JLayeredPane和JRootpane等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

滚动JPanel(滚动的天空)

滚动JPanel(滚动的天空)

我想要一个具有大小和定义位置的JPanel。在JPanel内部,我水平插入了一定数量的元素(按钮)。因为我的JPanel具有定义的宽度,所以如果添加很多按钮,则看不到。在这种情况下,我需要为此JPanel使用滚动条。但是,此JPanel必须是JFrame内某个位置的某个特定大小。JPanel的滚动条已在其下方水平放置。有人可以帮我吗?我尝试过没有成功!

答案1

小编典典

使用JScrollPane并将其preferredSize强制设置为给定的大小(或将scrollPane容器的LayoutManager设置为null并在滚动窗格上调用setBounds())。还设置滚动条策略。这是其中的一小部分示例:

import java.awt.Dimension;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;public class Test {    public static void main(String... args) {        JFrame frame = new JFrame();        JPanel panel = new JPanel();        for (int i = 0; i < 10; i++) {            panel.add(new JButton("Hello-" + i));        }        JScrollPane scrollPane = new JScrollPane(panel);        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);        scrollPane.setBounds(50, 30, 300, 50);        JPanel contentPane = new JPanel(null);        contentPane.setPreferredSize(new Dimension(500, 400));        contentPane.add(scrollPane);        frame.setContentPane(contentPane);        frame.pack();        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);        frame.setVisible(true);    }}

java swing 中滚动条添加到 JPanel 后添加到 JFrame 中滚动条不可见了?

java swing 中滚动条添加到 JPanel 后添加到 JFrame 中滚动条不可见了?

我的滚动条控件加到 JFrame 里可以显示,为什么加到让滚动条加到一个面板上,再加到一个 JFrame 上就不可以显示?

Object [][] pro=getData ();// 获取数据
JFrame jf=new JFrame("test");
jf.setSize(1000,100);
final Object proinfo []={"商品编号","商品名称","商标","商品价格","库存"};
JTable prolist=new JTable(pro,proinfo);
JScrollPane jsp=new JScrollPane(prolist);
jsp.setBounds(0,0,800,100);

jf.add(jsp);

jf.setVisible(true);
这个是可以显示的。

 添加一个 JPanel 后

Object [][] pro=getData ();// 获取数据
JFrame jf=new JFrame("test");
jf.setSize(1000,100);
final Object proinfo []={"商品编号","商品名称","商标","商品价格","库存"};
JTable prolist=new JTable(pro,proinfo);
JScrollPane jsp=new JScrollPane(prolist);
jsp.setBounds(0,0,800,100);
JPanel jp=new JPanel();
jp.setSize(800, 100);
jp.add(jsp);
jf.add(jp);
//jf.add(jsp);

jf.setVisible(true);

然后就显示成这个样子的了。我的滚动条去哪儿了?

java – JPanel周围的数字; JPanel边界?

java – JPanel周围的数字; JPanel边界?

我正在创建一个迷你游戏而且我被卡住了.这个网格应该是nxn,但在这种情况下它是6×6,直到我解决了问题.

无论如何,我想创建一个透明的边框

enter image description here

这将在每个单元格上方添加居中数字(在左侧和上方,但是,稍后我必须添加权限侧和向下).这样做有什么好办法?我四处搜寻,因为我知道国际象棋棋盘有这种“边界”,我实际上搜查了它们,但没有运气.

这是一个代码片段,单元格包含在一个简单的JPanel中,而其他所有内容都在JFrame中.

public GameFrame() {
    EventQueue.invokelater(new Runnable() {
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | illegalaccessexception
                    | UnsupportedLookAndFeelException ex) {
            }

            JFrame frame = new JFrame("Game");
            frame.setDefaultClo@R_301_6197@peration(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());
            frame.add(new GamePanel());
            frame.pack();
            frame.setLocationRelativeto(null);
            frame.setVisible(true);

            JMenuBar menubar = new JMenuBar();
            JMenu menu1 = new JMenu ("New");
            menubar.add(menu1);
            JMenu menu2 = new JMenu ("Load");
            menubar.add(menu2);
            JMenu menu3 = new JMenu ("Save");
            menubar.add(menu3);
            JMenu menu4 = new JMenu ("Size");
            menubar.add(menu4);
            JMenu menu5 = new JMenu ("Check");
            menubar.add(menu5);
            JMenu menu6 = new JMenu ("Solve");
            menubar.add(menu6);
            frame.setJMenuBar(menubar);
        }
    });

}

public class GamePanel extends JPanel {
    public GamePanel() {
        setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        for (int row = 0; row < 6; row++) {
            for (int col = 0; col < 6; coL++) {
                gbc.gridx = col;
                gbc.gridy = row;

                CellPanel cellPanel = new CellPanel();
                Border border = null;
                if (row < 5) {
                    if (col < 5) {
                        border = new MatteBorder(1,1,Color.GRAY);
                    } else {
                        border = new MatteBorder(1,Color.GRAY);
                    }
                } else {
                    if (col < 5) {
                        border = new MatteBorder(1,Color.GRAY);
                    }
                }
                cellPanel.setBorder(border);
                add(cellPanel,gbc);
            }
        }
    }
}
public class CellPanel extends JPanel {
    Color defaultBackground;

    public CellPanel() {
        addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                defaultBackground = getBackground();

                if (getBackground().equals(Color.BLUE)) { 
                    setBackground(null);
                } else {
                    setBackground(Color.BLUE);
                }
            }

        });
    }

    public Dimension getPreferredSize() {
        return new Dimension(50,50);
    }
}

Picture

解决方法

也许尝试在gridbaglayout中添加一个额外的列和行.然后在for()构造中将它们作为特殊情况控制或在1处启动索引,然后返回并在for()构造之外解决它们.

创建另一个可以用作CellLabel的继承JPanel,特别是如果它们看起来都相似的话.

java – JTabBar中的JPanel不可滚动

java – JTabBar中的JPanel不可滚动

在这里输入代码我有以下问题.

我在一个面板上添加了两个JPanels,最后将它添加到我的TabbedPane中.但是,我想让它可滚动,因此我只是使Panel可滚动,只是在栏的中间添加我的滚动条.

这是我的例子:

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 BoxLayout(panel,BoxLayout.Y_AXIS));    
            panel.add(table1());
            panel.add(Box.createRigidArea(new Dimension(0,10)));
            panel.add(table2());
            panel.add(Box.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 BoxLayout(panel1,BoxLayout.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 BoxLayout(panel1,BoxLayout.Y_AXIS));    
            return panel1;
        }
    }
}

我有什么建议我做错了吗?

感谢您的回复!

UPDATE

我用JScrollPane尝试了它但它仍然不起作用:

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 BoxLayout(panel,BoxLayout.Y_AXIS));

            panel.add(table1());
            panel.add(Box.createRigidArea(new Dimension(0,10)));
            panel.add(table3());
            panel.add(Box.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 BoxLayout(panel1,BoxLayout.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 BoxLayout(panel1,BoxLayout.Y_AXIS));

            return panel1;
        }

        public JPanel table3() {
            JPanel panel1 = new JPanel();

            String[] columnNames = {"First Name",BoxLayout.Y_AXIS));

            return panel1;
        }
    }
}

解决方法

Thx a lot for your answer! However,this only makes the JTable scrollable. Is it also possible to make the JPanel scrollable where the tables are inside?

如果这是你需要的

然后你可以做这样的事情:

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 BoxLayout(panel,BoxLayout.Y_AXIS));

    panel.add(table1());
    panel.add(Box.createRigidArea(new Dimension(0,10)));
    panel.add(table2());
    panel.add(Box.createRigidArea(new Dimension(0,10)));


    return sp;
}

java – 什么是JPanel,JFrame,JLayeredPane和JRootpane

java – 什么是JPanel,JFrame,JLayeredPane和JRootpane

我是 java新手,在阅读时我遇到了各种框架和面板,JFrame,JlayeredPane,JRootPane和JPannel之间的混淆是什么,它们之间的差异是可以在单个类中同时使用JFrame和JPanel.

解决方法

看看这里的图片

 从the German Java Tutorial page.

一些细节

> JFrame是窗口,显示为操作系统的顶级窗口.
> JFrame由多个功能元素组成.例如,其中一个可以减轻正确实现工具提示的负担:layeredPane.除此之外,工具提示始终位于其他所有内容之上.
> ContentPane是放置主要内容的最明智的地方.
> JPanel是一个通用容器.您用来将按钮和表单放入的头号课程.

The official Swing tutorial很好地总结了设计.

让我们做一个最小的例子:

import javax.swing.JFrame;

public class SomeFrame {

    public static void main(String [] as) {
        // let's make it as simple as possible
        JFrame jFrame = new JFrame("Hi!");
        jFrame.setVisible(true);
    }
}

上面的代码会生成一个Frame,但不是真的可用:

让它变大一点,只是为了揭示标题:

JFrame jFrame = new JFrame("Hi!");
    jFrame.setSize(200,50);
    jFrame.setVisible(true);

结果:

现在,让我们看看是否可以在框架中添加任何组件.让我们添加一个标签 – 在Swing中它是由JLabel类实现的:

JFrame jFrame = new JFrame("Hi!");
    jFrame.setSize(200,100);
    JLabel label = new JLabel("Hello Swing!");
    jFrame.add(label);
    jFrame.setVisible(true);

好的,我们做了什么?将JLabel添加到JFrame中.如果您将查看Swing代码,JFrame.add()方法在内部将组件添加到ContentPane中.所以上面的代码相当于:

JFrame jFrame = new JFrame("Hi!");
    jFrame.setSize(200,100);
    JLabel label = new JLabel("Hello Swing!");
    jFrame.getContentPane().add(label);         // <----
    jFrame.setVisible(true);

您可以自己检查ContentPane是否由JPanel内部实现.它在Swing代码中:

// this invocation...
JFrame jFrame = new JFrame("Hi!");

// effectively invokes following methods:

public JFrame(String title) throws HeadlessException {
    // ...
    frameInit();
}

protected void frameInit() {
    // ...
    setRootPane(createRootPane());
    // ...
}

protected JRootPane createRootPane() {
    JRootPane rp = new JRootPane();
    // ...
}

public JRootPane() {
    setGlasspane(createGlasspane());
    setlayeredPane(createlayeredPane());
    setContentPane(createContentPane());
    // ...
}

protected Container createContentPane() {
    JComponent c = new JPanel();             // <----
    // ...
    return c;
}

今天的关于滚动JPanel滚动的天空的分享已经结束,谢谢您的关注,如果想了解更多关于java swing 中滚动条添加到 JPanel 后添加到 JFrame 中滚动条不可见了?、java – JPanel周围的数字; JPanel边界?、java – JTabBar中的JPanel不可滚动、java – 什么是JPanel,JFrame,JLayeredPane和JRootpane的相关知识,请在本站进行查询。

本文标签: