【问题标题】:How do I display an array of Buttons on to a JScrollPane?如何在 JScrollPane 上显示一组按钮?
【发布时间】:2014-12-13 01:08:41
【问题描述】:

我正在尝试创建一组按钮并将它们放在滚动框中,但没有显示任何内容。另外,如何添加动作监听器?

JPanel buttons4Contacts = new JPanel();
buttons4Contacts.setLayout(new GridLayout(5, 5));

for (User user: Network.usersList){ //Make a JButton for every contact.
    JButton button = new JButton(user.getName());
    button.setPreferredSize(new Dimension(100,100));
    buttons4Contacts.add(button);
}

JPanel contactButtonHolder = new JPanel(new FlowLayout(FlowLayout.CENTER, 0,0));
contactButtonHolder.add(buttonsforContacts);
contacts = new JScrollPane(contactButtonHolder);

contacts.add(buttons4Contacts);
contacts.setPreferredSize(new Dimension(200,200));
rightPanelSouth.add(contacts);

【问题讨论】:

  • 将按钮放在面板中,并将面板添加到滚动窗格中。 “另外,如何添加动作侦听器?” SO 不是帮助台,而是问答网站。因此,这应该是一个单独的问题。
  • 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。
  • contacts.setPreferredSize(new Dimension(200,200));Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(是的。)

标签: java swing user-interface jbutton jscrollpane


【解决方案1】:

正如之前其他朋友提到的,你可以创建一个面板,在面板中添加所有按钮,最后在面板中添加滚动条。

这是我完成这项工作的简单代码:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class ArrayOfButtons extends JFrame{

    final static int numberOfButtons=5;   

    // Label to display the message indicating which button generated the event.

    JLabel label=new JLabel();

    // Panel to accomodate the labels

    JPanel panel=new JPanel(); 

    //We create an array of buttons whose number depends on our choice  

    JButton buttons[]=new JButton[numberOfButtons]; 

public ArrayOfButtons(){
    super("Demo");

    //We create an instance of the class ButtonHandler which implements the interface
    //ActionListener. And this object "handler" is basically the object that handles 
    //the events.            

    ButtonHandler handler=new ButtonHandler();  

    //Using a for loop we create JButtons.    

    for(int i=0;i<numberOfButtons;i++){
        buttons[i]=new JButton("Button"+i);

        // here we register handler as the event listener for all the buttons.i.e if in 
        // case an event occurs in any of the buttons, the event listener (in our case
        //the handler object) calls an appropriate method that handles the event.            

        buttons[i].addActionListener(handler);

        // add each button to the panel

        panel.add(buttons[i]);
    }

   // we add the label to the JFrame 
   add(label,BorderLayout.SOUTH);
   // we add ScrollPane to the JFrame and in turn add Panel to the ScrollPane.
   add(new JScrollPane(panel));      
}

// This is an inner class that handles the events.(Look more on inner classes).

 public class ButtonHandler implements ActionListener{   

    //This method is called in case an action event occurs.For example you click on the
    //button      
     public void actionPerformed(ActionEvent event){

         // gets the name of the button and displays in the label.

         label.setText(event.getActionCommand());

     }       
}
}

添加一个你自己的 main 方法,代码就可以正常工作了。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多