我是Java新手,目前正在努力学习它。我正在开发一个简单的程序来显示框架上的许多按钮。我还想让面板垂直滚动,而不是水平滚动。
到目前为止,这是我的代码:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class GridView {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame("Display Buttons");
frame.setBounds(30, 30, 300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout grid = new GridLayout(3, 4, 30, 20);
Container content = frame.getContentPane();
content.setLayout(grid);
JPanel panel = new JPanel();
JButton button = null;
for (int i = 1; i <= 100; i++) {
panel.add(button = new JButton(" Press " + i));
}
content.add(panel);
frame.add(panel, BorderLayout.NORTH);
frame.add(new JScrollPane(panel), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
有谁能告诉我为什么我的卷轴会水平显示以及如何修复它?任何形式的回应都将受到高度赞赏。
编辑: 对不起。我的问题不完整。我希望这样做,但是使用垂直滚动。
答案 0 :(得分:2)
它水平显示,因为按钮是水平添加的,因此panel
的宽度超出了视口
如果通过使用不同的布局管理器垂直添加按钮,则滚动窗格将垂直显示。例如:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); //or setLayout(grid); if you meant to use tge gridlayout for the buttons
/*JButton button = null;*/ //never used
for (int i = 1; i <= 100; i++) {
panel.add(new JButton(" Press " + i));
}
修改以回答已修改的问题。见评论:
public static void main(String[] args) {
JFrame frame = new JFrame("Display Buttons");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout grid = new GridLayout(0, 4, 30, 20);
JPanel panel = new JPanel(grid);
for (int i = 1; i <= 100; i++) {
panel.add(new JButton(" Press " + i));
}
JScrollPane sp = new JScrollPane(panel);
//by default scrollpane will appear as needed, vertically AND horizontally
//to prevent it from showing horizontally :
sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
frame.add(sp, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
答案 1 :(得分:2)
mark = 0
class illegal(Exception):
pass
while True:
try:
Mark = int(input("Enter a mark out of 100 to see if its valid or not: "))
if Mark < 0 or 100 < Mark:
raise illegal
break
except illegal:
print("Invalid mark")
print("Valid mark")
如果您想要组件列,则不要在布局管理器中指定行值。只需指定列,组件将在需要时换行
//GridLayout grid = new GridLayout(3, 4, 30, 20);
GridLayout grid = new GridLayout(0, 4, 30, 20);
您可以将按钮添加到面板,以便设置面板的布局管理器。否则,JPanel将使用默认的FlowLayout,它显示单行上的所有按钮。