Java JScrollPane内一个接一个按钮的列表
我想使用Swing在JScrollPane中列出JButton(具有固定尺寸,一个接一个)。我的想法是使用GridBagLayout创建JPanel,并在其适配行中添加按钮,然后使用该JPanel创建JScrollPane。当按钮数量较大时,这看起来很好,但当按钮数量为2或3时,我无法将一个按钮对齐到另一个按钮的正下方。 另外,稍后我将添加添加新按钮的选项(因此是+号)Java JScrollPane内一个接一个按钮的列表,java,swing,user-interface,jscrollpane,gridbaglayout,Java,Swing,User Interface,Jscrollpane,Gridbaglayout,我想使用Swing在JScrollPane中列出JButton(具有固定尺寸,一个接一个)。我的想法是使用GridBagLayout创建JPanel,并在其适配行中添加按钮,然后使用该JPanel创建JScrollPane。当按钮数量较大时,这看起来很好,但当按钮数量为2或3时,我无法将一个按钮对齐到另一个按钮的正下方。 另外,稍后我将添加添加新按钮的选项(因此是+号) 代码(创建上东面板) private JPanel createLayerPanel(){ JPanel layerP
private JPanel createLayerPanel(){
JPanel layerPanel=newjpanel(newgridbaglayout());
GridBagConstraints c=新的GridBagConstraints();
//标签------------------------------------------------
JLabel layersLabel=新的JLabel(“按钮”);
LayerLabel.setHorizontalAlignment(SwingConstants.CENTER);
layersLabel.setFont(默认字体);
//LayerLabel.setBorder(新线条边框(颜色为红色,3));
LayerLabel.setBackground(新颜色(0x22222));
LayerLabel.setForeground(新颜色(0xFFFFFF));
layersLabel.set不透明(true);
c、 gridx=c.gridy=0;
c、 ipadx=180;
c、 权重x=1;
c、 fill=GridBagConstraints.BOTH;
layerPanel.add(LayerLabel,c);
//钮扣------------------------------------------------
JButton newLayerBtn=新JButton(“+”);
newLayerBtn.setFont(新字体(Font.SANS_SERIF,Font.PLAIN,18));
新图层背景(新颜色(0x22222));
newLayerBtn.setForeground(颜色:白色);
newLayerBtn.setFocusable(假);
c、 gridx=1;
c、 gridy=0;
c、 ipadx=0;
c、 权重x=0;
layerPanel.add(新LAYERBTN,c);
//滚动窗格------------------------------------------------
//------------------------------------------------------------
//------------------------------------------------------------
JPanel layerListPanel=newjpanel(newgridbaglayout());
层板立根(颜色:黑色);
GridBagConstraints gbc=新的GridBagConstraints();
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.weightx=1.0;
gbc.weighty=1;
gbc.ipady=40;
gbc.gridx=0;
gbc.anchor=gridbag.NORTH;
对于(gbc.gridy=0;gbc.gridy<10;gbc.gridy++){
JButton btn=新JButton(“按钮”+gbc.gridy);
layerListPanel.add(btn、gbc);
}
JScrollPane js=新的JScrollPane(layerListPanel);
js.setHorizontalScrollBarPolicy(ScrollPaneConstants.HorizontalScrollBar\uNever);
// ...
c、 gridx=0;
c、 gridy=1;
c、 网格宽度=2;
c、 权重=1;
c、 fill=GridBagConstraints.BOTH;
layerPanel.add(js,c);
返回层面板;
}
您确实需要GridBagLayout吗?
我只是用一个简单的盒子做了一个演示。
请看一看
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类YY扩展JFrame{
静态字符串[]args;
公共YY(){
设置大小(160200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLocationRelativeTo(空);
inticnt=args.length==0?5:Integer.parseInt(args[0]);
Box=Box.createVerticalBox();
对于(inti=1;i您绝对需要GridBagLayout吗?
我只是用一个简单的盒子做了一个演示。
请看一看
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类YY扩展JFrame{
静态字符串[]args;
公共YY(){
设置大小(160200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLocationRelativeTo(空);
inticnt=args.length==0?5:Integer.parseInt(args[0]);
Box=Box.createVerticalBox();
对于(int i=1;i下面的代码最初显示一个JFrame
,其中包含一个JButton
,该按钮显示文本Add。每次单击按钮时,按钮上方会出现一个新的JButton
。每个新创建的按钮上的文本是一个带前导零的三位数,每次单击按钮时前导零都会递增单击添加按钮。每当添加新按钮时,JFrame
会增加高度以显示新添加的按钮
导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.WindowConstants;
公共类GridBTTTN实现ActionListener,Runnable{
专用int计数器;
私有JFrame;
私人JPanel gridPanel;
@凌驾
公开募捐{
showGui();
}
@凌驾
已执行的公共无效操作(操作事件){
addButtonToGridPanel();
}
私有void addButtonToGridPanel(){
JButton button=newjbutton(String.format(“%03d”,counter++));
gridPanel.add(按钮);
frame.pack();
}
私有JButton createButton(字符串文本){
JButton按钮=新JButton(文本);
addActionListener(这个);
返回按钮;
}
私有JPanel CreateButtonPanel(){
JPanel buttonPanel=新的JPanel();
按钮面板添加(创建按钮(“添加”));
返回按钮面板;
}
私有JPanel createGridPanel(){
gridPanel=newJPanel(新的GridLayout(0,1));
返回网格面板;
}
私有void showGui(){
框架=新的JFrame(“网格”);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
添加(createGridPanel(),BorderLayout.CENTER);
frame.add(createButtonsPanel(),BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(真);
第六帧
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class YY extends JFrame {
static String[] args;
public YY() {
setSize(160, 200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
int icnt= args.length==0 ? 5 : Integer.parseInt(args[0]);
Box box= Box.createVerticalBox();
for (int i=1; i<=icnt; i++) {
JButton btn= new JButton("Button "+i);
btn.setMaximumSize(new Dimension(150, 30));
box.add(btn);
}
JScrollPane scroll= new JScrollPane(box);
scroll.setPreferredSize(new Dimension(150, 100));
add(scroll);
setVisible(true);
}
public static void main(String... args) {
YY.args= args;
EventQueue.invokeLater(YY::new);
}
}