本篇文章给大家谈谈滚动JPanel,以及滚动的天空的知识点,同时本文还将给你拓展javaswing中滚动条添加到JPanel后添加到JFrame中滚动条不可见了?、java–JPanel周围的数字;J
本篇文章给大家谈谈滚动JPanel,以及滚动的天空的知识点,同时本文还将给你拓展java swing 中滚动条添加到 JPanel 后添加到 JFrame 中滚动条不可见了?、java – JPanel周围的数字; JPanel边界?、java – JTabBar中的JPanel不可滚动、java – 什么是JPanel,JFrame,JLayeredPane和JRootpane等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- 滚动JPanel(滚动的天空)
- java swing 中滚动条添加到 JPanel 后添加到 JFrame 中滚动条不可见了?
- java – JPanel周围的数字; JPanel边界?
- java – JTabBar中的JPanel不可滚动
- java – 什么是JPanel,JFrame,JLayeredPane和JRootpane
滚动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 中滚动条不可见了?
我的滚动条控件加到 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边界?
无论如何,我想创建一个透明的边框
这将在每个单元格上方添加居中数字(在左侧和上方,但是,稍后我必须添加权限侧和向下).这样做有什么好办法?我四处搜寻,因为我知道国际象棋棋盘有这种“边界”,我实际上搜查了它们,但没有运气.
这是一个代码片段,单元格包含在一个简单的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); } }
解决方法
创建另一个可以用作CellLabel的继承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
解决方法
从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的相关知识,请在本站进行查询。
本文标签: