如何在具有多个按钮的jframe上应用滚动条

时间:2017-05-18 16:19:13

标签: java jframe jbutton actionlistener jscrollpane

我正在创建一个框架,显示一个显示某些产品位置的Jbuttons列表。我希望此列表为按钮的原因是,如果单击它们,则将它们链接到其他帧。我想知道一种方法,让滚动条可以遍历整个列表。我目前的守则如下:

enter code here
import javax.swing.*;//window settings
import java.awt.*;//font settings
import java.awt.event.*;//action settings
public class locationFrame extends JFrame implements ActionListener
{
    Font tFont=new Font("Arial",Font.BOLD,46);
    Font bFont=new Font("Arial",Font.BOLD,52);

    JLabel Title=new JLabel("Enid's Picks");
    JLabel label=new JLabel("");
    Image img=new 
    ImageIcon(this.getClass().getResource("/HPMLOGO.png")).getImage();
    JButton backButton=new JButton("Go Back");
    JButton AlemaniButton=new JButton("Alemania");
    JButton ArgentinaButton=new JButton("Argentina");
    JButton CaliforniaButton=new JButton("California");
    JButton ChileButton=new JButton("Chile");
    JButton EspanaButton=new JButton("Espana");
    JButton FranciaButton=new JButton("Francia");
    JButton ItaliaButton=new JButton("Italia");
    JButton NZButton=new JButton("New Zealand");
    JButton PortugalButton=new JButton("Portugal");
    JButton PRButton=new JButton("Puerto Rico");
    JButton USAButton=new JButton("USA");
    JScrollPane scroll=new 
    ScrollPane(Title,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
public locationFrame()
{
    super("Wine Application");
    setLayout(null);
    Title.setFont(tFont);
    Title.setLocation(450,0);
    Title.setSize(300,100);
    label.setIcon(new ImageIcon(img));
    label.setBounds(350,100,500,500);
    backButton.setFont(bFont);
    backButton.setBounds(800,1800,400,100);

    AlemaniButton.setFont(bFont);
    ArgentinaButton.setFont(bFont);
    CaliforniaButton.setFont(bFont);
    ChileButton.setFont(bFont);
    EspanaButton.setFont(bFont);
    FranciaButton.setFont(bFont);
    ItaliaButton.setFont(bFont);
    NZButton.setFont(bFont);
    PortugalButton.setFont(bFont);
    PRButton.setFont(bFont);
    USAButton.setFont(bFont);

    AlemaniButton.setBounds(300,700,600,150);
    ArgentinaButton.setBounds(300,1085,600,150);
    CaliforniaButton.setBounds(300,1470,600,150);
    ChileButton.setBounds(300,1855,600,150);
    EspanaButton.setBounds(300,2240,600,150);
    FranciaButton.setBounds(300,2625,600,150);
    ItaliaButton.setBounds(300,3010,600,150);
    NZButton.setBounds(300,3395,600,150);
    PortugalButton.setBounds(300,3780,600,150);
    PRButton.setBounds(300,4165,600,150);
    USAButton.setBounds(300,4550,600,150);

    setExtendedState(JFrame.MAXIMIZED_BOTH);
    add(Title);
    add(label);
    add(backButton);
    add(AlemaniButton);
    add(ArgentinaButton);
    add(CaliforniaButton);
    add(ChileButton);
    add(EspanaButton);
    add(FranciaButton);
    add(ItaliaButton);
    add(NZButton);
    add(PortugalButton);
    add(PRButton);
    add(USAButton);

    add(scroll);

    getContentPane().setBackground(new Color(255,255,255));
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    backButton.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e)
{
    if(e.getSource()==backButton)
    {
    mainWineFrame mainFrame=new mainWineFrame();
    mainFrame.setVisible(true);
    setVisible(false);
    }
}

}

1 个答案:

答案 0 :(得分:0)

你的代码和问题都有很多缺陷。我将列出其中的一些内容,希望我能帮助您解决问题并改进代码编写。

  1. 代码格式:您应该注意您正在使用的语言的代码和命名惯例。 Java采用camelCase,所以你不应该用大写字母命名你的属性。
  2. 属性可见性:我不知道您是否这样做,但您的属性应始终由修饰符(公共,包,私有或受保护)限定
  3. 您的问题有很多代码并没有真正帮助任何人帮助您。实际上,它甚至编译问题。你也应该注意这一点。
  4. 现在,为了帮助您,在您的代码上,您尝试创建一个JSLrollPane,其viewPort绑定到JLabel(标题)。这没有多大意义,是吗?我认为您应该更仔细地阅读有关JScrollPane的文档,并记住该组件有一个ViewPort,简单来说,当您与滚动条交互时,该组件实际上会发生变化。

    我相信这至少可以为你如何建立你想要的东西提供一些指导。

        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        for (int i = 0; i < 10; i++) {
            panel.add(new JButton(""+i));
        }
    
        JScrollPane scrollPane = new JScrollPane(panel);
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
        frame.setPreferredSize(new Dimension(100, 100));
        frame.pack();
        frame.setVisible(true);
    

    您可以在此处找到参考资料:How to Use Scroll Panes