第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

有沒(méi)有辦法檢測(cè) JPopupMenu 中的當(dāng)前選擇

有沒(méi)有辦法檢測(cè) JPopupMenu 中的當(dāng)前選擇

暮色呼如 2023-11-01 22:02:54
我想檢測(cè)選擇內(nèi)容何時(shí)發(fā)生變化JPopupMenu。不是單擊菜單項(xiàng)時(shí),而是選擇(武裝)菜單項(xiàng)時(shí)。用更簡(jiǎn)單的話來(lái)說(shuō),我想檢測(cè)到這一點(diǎn):https://i.stack.imgur.com/gSUvP.gif 應(yīng)該起作用的事情是將 a 添加ChangeListener到其SelectionModel,但它似乎沒(méi)有響應(yīng)選擇事件:public class PopupSelection extends JFrame {    private static final long serialVersionUID = 363879723515243543L;    public PopupSelection() {        super("something");        setDefaultCloseOperation(EXIT_ON_CLOSE);        setLayout(new FlowLayout());        JLabel label = new JLabel("right click me");        JPopupMenu menu = new JPopupMenu();        menu.getSelectionModel().addChangeListener(System.out::println);        JMenuItem menuItem1 = new JMenuItem("Item1");        JMenuItem menuItem2 = new JMenuItem("Item2");        JMenuItem menuItem3 = new JMenuItem("Item3");        menu.add(menuItem1);        menu.add(menuItem2);        menu.add(menuItem3);        label.setComponentPopupMenu(menu);        getContentPane().add(label);        setSize(400, 400);        setLocationRelativeTo(null);    }    public static void main(String[] args) {        SwingUtilities.invokeLater(() -> new PopupSelection().setVisible(true));    }}我嘗試的第二件事是使用 a PropertyChangeListener,但它不起作用(不檢測(cè)此特定事件):menu.addPropertyChangeListener(System.out::println);我知道有另一種選擇,ChangeListener即JMenuItem每次迭代 的所有組件時(shí)都添加 a JPopupMenu,以便找到選擇的組件,但這不是我想要遵循的解決方案,因?yàn)樗鼤?huì)在我的代碼中增加不必要的復(fù)雜性。那么,有沒(méi)有辦法檢測(cè)選擇呢?如果出現(xiàn)XY 問(wèn)題,我的最終目標(biāo)是當(dāng)用戶(hù)使用箭頭按鈕更改菜單選擇時(shí)正確增加/減少此滾動(dòng)條:↑ ↓
查看完整描述

2 回答

?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

在項(xiàng)目的按鈕模型上使用更改偵聽(tīng)器。這是解決方案:


import java.awt.Component;

import java.awt.FlowLayout;

import java.util.stream.Stream;


import javax.swing.AbstractButton;

import javax.swing.ButtonModel;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenuItem;

import javax.swing.JPopupMenu;

import javax.swing.SwingUtilities;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;


/**

 * <code>PopupSelection</code>.

 */

public class PopupSelection extends JFrame {

    private static final long serialVersionUID = 363879723515243543L;


    public PopupSelection() {

        super("something");

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setLayout(new FlowLayout());


        JLabel label = new JLabel("right click me");


        JPopupMenu menu = new MyPopupMenu();

        menu.getSelectionModel().addChangeListener(System.out::println);


        JMenuItem menuItem1 = new JMenuItem("Item1");

        JMenuItem menuItem2 = new JMenuItem("Item2");

        JMenuItem menuItem3 = new JMenuItem("Item3");

        menu.add(menuItem1);

        menu.add(menuItem2);

        menu.add(menuItem3);


        label.setComponentPopupMenu(menu);


        getContentPane().add(label);

        setSize(400, 400);

        setLocationRelativeTo(null);

    }


    public static void main(String[] args) {

        SwingUtilities.invokeLater(() -> new PopupSelection().setVisible(true));

    }


    private static class MyPopupMenu extends JPopupMenu {


        private final ChangeListener listener = this::changed;


        @Override

        protected void addImpl(Component comp, Object constraints, int index) {

            super.addImpl(comp, constraints, index);

            if (comp instanceof AbstractButton) {

                ((AbstractButton) comp).getModel().addChangeListener(listener);

            }

        }


        @Override

        public void remove(int index) {

            Component comp = getComponent(index);

            if (comp instanceof AbstractButton) {

                ((AbstractButton) comp).getModel().removeChangeListener(listener);

            }

            super.remove(index);

        }


        private void changed(ChangeEvent e) {

            ButtonModel model = (ButtonModel) e.getSource();

            AbstractButton selected = Stream.of(getComponents()).filter(AbstractButton.class::isInstance)

                    .map(AbstractButton.class::cast)

                    .filter(b -> b.getModel().isArmed() && b.getModel() == model).findAny().orElse(null);

            setSelected(selected);

        }

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-11-01
?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以將a添加到 MenuSelectionManager,而不是向ChangeListener每個(gè)添加 a 。JMenuItemChangeListener


MenuSelectionManager.defaultManager().addChangeListener(e -> {

  Object o = e.getSource();

  if (o instanceof MenuSelectionManager) {

    MenuSelectionManager m = (MenuSelectionManager) o;

    printMenuElementArray(m.getSelectedPath());

  }

});

PopupSelection2.java


import java.awt.*;

import javax.swing.*;


public class PopupSelection2 extends JFrame {

  public PopupSelection2() {

    super("something");

    setDefaultCloseOperation(EXIT_ON_CLOSE);

    setLayout(new FlowLayout());


    JLabel label = new JLabel("right click me");


    JPopupMenu menu = new JPopupMenu();

    menu.getSelectionModel().addChangeListener(System.out::println);


    JMenuItem menuItem1 = new JMenuItem("Item1");

    JMenuItem menuItem2 = new JMenuItem("Item2");

    JMenuItem menuItem3 = new JMenuItem("Item3");

    menu.add(menuItem1);

    menu.add(menuItem2);

    menu.add(menuItem3);


    label.setComponentPopupMenu(menu);


    MenuSelectionManager.defaultManager().addChangeListener(e -> {

      Object o = e.getSource();

      if (o instanceof MenuSelectionManager) {

        MenuSelectionManager m = (MenuSelectionManager) o;

        printMenuElementArray(m.getSelectedPath());

      }

    });


    getContentPane().add(label);

    setSize(400, 400);

    setLocationRelativeTo(null);

  }


  // @see javax/swing/MenuSelectionManager.java

  private static void printMenuElementArray(MenuElement[] path) {

    System.out.println("Path is(");

    for (int i = 0, j = path.length; i < j ; i++) {

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

        System.out.print("  ");

      }

      MenuElement me = path[i];

      if (me instanceof JMenuItem) {

        System.out.println(((JMenuItem)me).getText() + ", ");

      } else if (me instanceof JMenuBar) {

        System.out.println("JMenuBar, ");

      } else if (me instanceof JPopupMenu) {

        System.out.println("JPopupMenu, ");

      } else if (me == null) {

        System.out.println("NULL , ");

      } else {

        System.out.println("" + me + ", ");

      }

    }

    System.out.println(")");

  }


  public static void main(String[] args) {

    SwingUtilities.invokeLater(() -> new PopupSelection2().setVisible(true));

  }

}


查看完整回答
反對(duì) 回復(fù) 2023-11-01
  • 2 回答
  • 0 關(guān)注
  • 161 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)