java swing jlist保存_在Swing Java中将元素添加到JList

小编典典

不要使用,实际上不要Thread.sleep(int)在期间使用EventDispashThread,因为睡眠锁定了当前电流Thread,在这种情况下EventDispashThread,它向GUI输出了异常输出,更多有关Swing的Concurency,

如果需要处理,则将Items wrappend添加到中Runneble#Thread,将GUI的输出包装到中invokeLater,或者最好的方法是使用javax.swing.Timer

编辑1。示例如何使用Thread.sleep(int)以编程方式阻止EDT,因为否则其他情况就无法与期望输出到GUI配合使用(代码非常懒散,因为我想编码)

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class ShakingButtonDemo implements Runnable {

private JButton button;

private JRadioButton radioWholeButton;

private JRadioButton radioTextOnly;

public static void main(String[] args) throws Exception {

SwingUtilities.invokeLater(new ShakingButtonDemo());

}

@Override

public void run() {

radioWholeButton = new JRadioButton("The whole button");

radioTextOnly = new JRadioButton("Button text only");

radioWholeButton.setSelected(true);

ButtonGroup bg = new ButtonGroup();

bg.add(radioWholeButton);

bg.add(radioTextOnly);

button = new JButton(" Shake with this Button ");

button.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

shakeButton(radioWholeButton.isSelected());

}

});

JPanel p1 = new JPanel();

p1.setBorder(BorderFactory.createTitledBorder("Shake Options"));

p1.setLayout(new GridLayout(0, 1));

p1.add(radioWholeButton);

p1.add(radioTextOnly);

JPanel p2 = new JPanel();

p2.setLayout(new GridLayout(0, 1));

p2.add(button);

JFrame frame = new JFrame();

frame.setTitle("Shaking Button Demo");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.add(p1, BorderLayout.NORTH);

frame.add(p2, BorderLayout.SOUTH);

frame.setSize(240, 160);

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

private void shakeButton(final boolean shakeWholeButton) {

final Point point = button.getLocation();

final Insets margin = button.getMargin();

final int delay = 75;

Runnable r = new Runnable() {

@Override

public void run() {

for (int i = 0; i < 30; i++) {

try {

if (shakeWholeButton) {

moveButton(new Point(point.x + 5, point.y));

Thread.sleep(delay);

moveButton(point);

Thread.sleep(delay);

moveButton(new Point(point.x - 5, point.y));

Thread.sleep(delay);

moveButton(point);

Thread.sleep(delay);

} else {// text only

setButtonMargin(new Insets(margin.top, margin.left + 3, margin.bottom, margin.right - 2));

Thread.sleep(delay);

setButtonMargin(margin);

Thread.sleep(delay);

setButtonMargin(new Insets(margin.top, margin.left - 2, margin.bottom, margin.right + 3));

Thread.sleep(delay);

setButtonMargin(margin);

Thread.sleep(delay);

}

} catch (InterruptedException ex) {

ex.printStackTrace();

}

}

}

};

Thread t = new Thread(r);

t.start();

}

private void moveButton(final Point p) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

button.setLocation(p);

}

});

}

private void setButtonMargin(final Insets margin) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

button.setMargin(margin);

}

});

}

}

编辑第二。@camickr亲切的帮助(看起来像similair)

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.*;

public class ShakeComponents1 {

private JFrame frame = new JFrame();

private final String items[] = {"One", "Two", "Three"};

private Timer timer;

private JPanel panel = new JPanel();

private JPanel buttonPanel = new JPanel();

private JButton button = new JButton(" Exit ");

private boolean repeats = true;

private boolean runs = false;

private Color clr[] = {Color.red, Color.blue, Color.magenta};

private Insets initMargin;

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

new ShakeComponents1().makeUI();

}

});

}

public void makeUI() {

buttonPanel = new JPanel();

buttonPanel.setBorder(new EmptyBorder(5, 5, 5, 5));

buttonPanel.setLayout(new BorderLayout());

button.setPreferredSize(new Dimension(100, 45));

button.setForeground(Color.darkGray);

button.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent event) {

Runnable doRun = new Runnable() {

@Override

public void run() {

System.exit(0);

}

};

SwingUtilities.invokeLater(doRun);

}

});

button.addMouseListener(new java.awt.event.MouseListener() {

@Override

public void mouseClicked(MouseEvent e) {

}

@Override

public void mousePressed(MouseEvent e) {

}

@Override

public void mouseReleased(MouseEvent e) {

}

@Override

public void mouseEntered(MouseEvent e) {

if (runs) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

runs = false;

timer.stop();

changePnlBorder(new EmptyBorder(5, 5, 5, 5));

changeBtnForegroung(Color.darkGray);

}

});

}

}

@Override

public void mouseExited(MouseEvent e) {

if (!runs) {

timer.start();

runs = true;

}

}

});

buttonPanel.add(button);

final Insets margin = button.getMargin();

panel.add(buttonPanel);

for (int i = 0; i < 2; i++) {

JComboBox combo = new JComboBox(items);

combo.setMinimumSize(new Dimension(50, 25));

combo.setMaximumSize(new Dimension(150, 25));

combo.setPreferredSize(new Dimension(100, 25));

combo.addActionListener(new ShakeAction());

panel.add(combo);

}

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.add(panel);

frame.pack();

frame.setLocation(50, 50);

frame.setVisible(true);

timer = new Timer(500, new ShakeAction());

timer.setRepeats(repeats);

initMargin = button.getMargin();

}

private class ShakeAction extends AbstractAction {

private static final long serialVersionUID = 1L;

private int noColor = 0;

private Border border;

private int count = 0;

@Override

public void actionPerformed(ActionEvent e) {

timer.start();

if (count > 5) {

new Thread(new Runnable() {

@Override

public void run() {

try {

Thread.sleep(750);

changeBtnForegroung(Color.darkGray);

Thread.sleep(750);

count = 0;

Thread.sleep(750);

} catch (Exception e) {

System.out.println(e);

}

}

}).start();

} else {

new Thread(new Runnable() {

@Override

public void run() {

try {

runs = true;

if (noColor < 2) {

noColor++;

changeBtnForegroung(clr[noColor]);

} else {

noColor = 0;

changeBtnForegroung(clr[noColor]);

}

changeBtnMargin(new Insets(initMargin.top, initMargin.left + 10, initMargin.bottom, initMargin.right - 10));

border = new EmptyBorder(0, 5, 10, 5);

changePnlBorder(border);

Thread.sleep(100);

changeBtnMargin(new Insets(initMargin.top, initMargin.left - 10, initMargin.bottom, initMargin.right + 10));

border = new EmptyBorder(0, 0, 10, 10);

changePnlBorder(border);

Thread.sleep(100);

changeBtnMargin(new Insets(initMargin.top, initMargin.left + 10, initMargin.bottom, initMargin.right - 10));

border = new EmptyBorder(5, 10, 5, 0);

changePnlBorder(border);

Thread.sleep(100);

changeBtnMargin(new Insets(initMargin.top, initMargin.left - 10, initMargin.bottom, initMargin.right + 10));

border = new EmptyBorder(10, 10, 0, 0);

changePnlBorder(border);

Thread.sleep(100);

changeBtnMargin(new Insets(initMargin.top, initMargin.left, initMargin.bottom, initMargin.right));

border = new EmptyBorder(5, 5, 5, 5);

changePnlBorder(border);

Thread.sleep(100);

count++;

} catch (Exception e) {

System.out.println(e);

}

}

}).start();

}

}

}

private void changePnlBorder(final Border b) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

buttonPanel.setBorder(b);

buttonPanel.revalidate();

buttonPanel.repaint();

}

});

}

private void changeBtnForegroung(final Color c) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

button.setForeground(c);

}

});

}

private void changeBtnMargin(final Insets margin) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

button.setMargin(margin);

}

});

}

}

编辑3。

import java.awt.*;

import java.util.*;

import javax.swing.*;

import javax.swing.event.*;

public class DelayedComboBoxTest extends JFrame {

private static final long serialVersionUID = 1L;

private JCheckBox chkA = new JCheckBox("A");

private JCheckBox chkB = new JCheckBox("B");

private JCheckBox chkC = new JCheckBox("C");

private JComboBox cboItems = new JComboBox();

public DelayedComboBoxTest() {

super("Delayed ComboBox Test");

setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel p = new JPanel();

p.add(chkA);

p.add(chkB);

p.add(chkC);

p.add(cboItems);

Container c = getContentPane();

c.setLayout(new BorderLayout());

c.add(p);

pack();

cboItems.addPopupMenuListener(new MyPopupMenuListener());

}

private void rebuildList() {

setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

Vector items = new Vector();

if (chkA.isSelected()) {

items.add("A");

}

if (chkB.isSelected()) {

items.add("B");

}

if (chkC.isSelected()) {

items.add("C");

}

cboItems.setModel(new DefaultComboBoxModel(items));

try {

new Thread().sleep(2500); // simulate a long transaction

} catch (InterruptedException ex) {

}

setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));

}

public static void main(String[] args) {

JFrame f = new DelayedComboBoxTest();

f.setVisible(true);

}

private class MyPopupMenuListener implements PopupMenuListener {

@Override

public void popupMenuCanceled(PopupMenuEvent e) {

}

@Override

public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {

}

@Override

public void popupMenuWillBecomeVisible(PopupMenuEvent e) {

int items = cboItems.getItemCount();

rebuildList();

if (items != cboItems.getItemCount()) {

cboItems.hidePopup();

cboItems.showPopup();

}

}

}

}

但对于所有示例,都必须存在EDT Events,EventQueue否则就无法使用EDT

2020-11-12

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值