java jlist 用法_Swing-JList用法-入门

/** Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.

*

* Redistribution and use in source and binary forms, with or without

* modification, are permitted provided that the following conditions

* are met:

*

* - Redistributions of source code must retain the above copyright

* notice, this list of conditions and the following disclaimer.

*

* - Redistributions in binary form must reproduce the above copyright

* notice, this list of conditions and the following disclaimer in the

* documentation and/or other materials provided with the distribution.

*

* - Neither the name of Oracle or the names of its

* contributors may be used to endorse or promote products derived

* from this software without specific prior written permission.

*

* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS

* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,

* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR

* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR

* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,

* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,

* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR

* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF

* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING

* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS

* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

packageGUI.components;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;/*ListDemo.java requires no other files.*/

public class ListDemo extendsJPanelimplementsListSelectionListener {privateJList list;privateDefaultListModel listModel;private static final String hireString = "Hire";private static final String fireString = "Fire";privateJButton fireButton;privateJTextField employeeName;publicListDemo() {super(newBorderLayout());

listModel= newDefaultListModel();

listModel.addElement("Jane Doe");

listModel.addElement("John Smith");

listModel.addElement("Kathy Green");//Create the list and put it in a scroll pane.

list = newJList(listModel);

list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

list.setSelectedIndex(0);

list.addListSelectionListener(this);

list.setVisibleRowCount(5);

JScrollPane listScrollPane= newJScrollPane(list);

JButton hireButton= newJButton(hireString);

HireListener hireListener= newHireListener(hireButton);

hireButton.setActionCommand(hireString);

hireButton.addActionListener(hireListener);

hireButton.setEnabled(false);

fireButton= newJButton(fireString);

fireButton.setActionCommand(fireString);

fireButton.addActionListener(newFireListener());

employeeName= new JTextField(10);

employeeName.addActionListener(hireListener);

employeeName.getDocument().addDocumentListener(hireListener);

String name=listModel.getElementAt(

list.getSelectedIndex()).toString();//Create a panel that uses BoxLayout.

JPanel buttonPane = newJPanel();

buttonPane.setLayout(newBoxLayout(buttonPane,

BoxLayout.LINE_AXIS));

buttonPane.add(fireButton);

buttonPane.add(Box.createHorizontalStrut(5));

buttonPane.add(newJSeparator(SwingConstants.VERTICAL));

buttonPane.add(Box.createHorizontalStrut(5));

buttonPane.add(employeeName);

buttonPane.add(hireButton);

buttonPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));

add(listScrollPane, BorderLayout.CENTER);

add(buttonPane, BorderLayout.SOUTH);

}class FireListener implementsActionListener {public voidactionPerformed(ActionEvent e) {//This method can be called only if//there's a valid selection//so go ahead and remove whatever's selected.

int index =list.getSelectedIndex();

listModel.remove(index);int size =listModel.getSize();if (size == 0) { //Nobody's left, disable firing.

fireButton.setEnabled(false);

}else { //Select an index.

if (index ==listModel.getSize()) {//removed item in last position

index--;

}

list.setSelectedIndex(index);

list.ensureIndexIsVisible(index);

}

}

}//This listener is shared by the text field and the hire button.

class HireListener implementsActionListener, DocumentListener {private boolean alreadyEnabled = false;privateJButton button;publicHireListener(JButton button) {this.button =button;

}//Required by ActionListener.

public voidactionPerformed(ActionEvent e) {

String name=employeeName.getText();//User didn't type in a unique name...

if (name.equals("") ||alreadyInList(name)) {

Toolkit.getDefaultToolkit().beep();

employeeName.requestFocusInWindow();

employeeName.selectAll();return;

}int index = list.getSelectedIndex(); //get selected index

if (index == -1) { //no selection, so insert at beginning

index = 0;

}else { //add after the selected item

index++;

}

listModel.insertElementAt(employeeName.getText(), index);//If we just wanted to add to the end, we'd do this://listModel.addElement(employeeName.getText());//Reset the text field.

employeeName.requestFocusInWindow();

employeeName.setText("");//Select the new item and make it visible.

list.setSelectedIndex(index);

list.ensureIndexIsVisible(index);

}//This method tests for string equality. You could certainly//get more sophisticated about the algorithm. For example,//you might want to ignore white space and capitalization.

protected booleanalreadyInList(String name) {returnlistModel.contains(name);

}//Required by DocumentListener.

public voidinsertUpdate(DocumentEvent e) {

enableButton();

}//Required by DocumentListener.

public voidremoveUpdate(DocumentEvent e) {

handleEmptyTextField(e);

}//Required by DocumentListener.

public voidchangedUpdate(DocumentEvent e) {if (!handleEmptyTextField(e)) {

enableButton();

}

}private voidenableButton() {if (!alreadyEnabled) {

button.setEnabled(true);

}

}private booleanhandleEmptyTextField(DocumentEvent e) {if (e.getDocument().getLength() <= 0) {

button.setEnabled(false);

alreadyEnabled= false;return true;

}return false;

}

}//This method is required by ListSelectionListener.

public voidvalueChanged(ListSelectionEvent e) {if (e.getValueIsAdjusting() == false) {if (list.getSelectedIndex() == -1) {//No selection, disable fire button.

fireButton.setEnabled(false);

}else{//Selection, enable the fire button.

fireButton.setEnabled(true);

}

}

}/*** Create the GUI and show it. For thread safety,

* this method should be invoked from the

* event-dispatching thread.*/

private static voidcreateAndShowGUI() {//Create and set up the window.

JFrame frame = new JFrame("ListDemo");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Create and set up the content pane.

JComponent newContentPane = newListDemo();

newContentPane.setOpaque(false); //content panes must be opaque

frame.setContentPane(newContentPane);//Display the window.

frame.pack();

frame.setVisible(true);

}public static voidmain(String[] args) {//Schedule a job for the event-dispatching thread://creating and showing this application's GUI.

javax.swing.SwingUtilities.invokeLater(newRunnable() {public voidrun() {

createAndShowGUI();

}

});

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值