如標題所示,當以編程方式添加組件時,我很難讓我的JMenu調整大小。在我的應用程式中,我需要帶有JCheckBoxes的JMenu。每當我勾選其中一個,JSlider就會出現在下面。下面是實作這一目標的代碼。我遇到的問題是,當有很多滑塊可見時,JMenu中的專案就會聚集在一起--見下圖。
我怎樣才能強制重新繪制/調整/擴展JMenu,以保持原始復選框/滑塊的高度?
另外請注意--在選擇復選框時,JMenu一直保持可見。只有當我點擊它以外的地方時,它才會關閉。但在這種 "重啟 "之后,選單會增長,問題就不再存在了。
預先感謝!
public class Window extends JFrame implements ActionListener {
private JPanel panel;
private JMenuBar menuBar;
private JMenu選單。
private JSlider slider1;
private JCheckBoxMenuItem checkBox1;
private JCheckBoxMenuItem checkBox2;
private JCheckBoxMenuItem checkBox3;
public Window() {
super("example")。
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。
setMinimumSize(new Dimension(300,300) 。)
panel = new JPanel();
panel.setMinimumSize(new Dimension(300,300) )。)
menuBar = new JMenuBar();
menu = new JMenu("Options") 。
checkBox1 = new JCheckBoxMenuItem("option 1")。
checkBox2 = new JCheckBoxMenuItem("option 2") 。
checkBox3 = new JCheckBoxMenuItem("option 3") 。
checkBox1.addActionListener(this)。
//防止JMenu在選擇CheckBox后關閉。
checkBox1.setUI(new BasicCheckBoxMenuItemUI() {
@Override
protected void doClick(MenuSelectionManager msm) {
checkBox1.doClick(0)。
}
});
slider1 = new JSlider();
slider1.setVisible(false)。
menu.add(checkBox1);
menu.add(slider1);
menu.add(checkBox2);
menu.add(checkBox3);
menuBar.add(menu);
setJMenuBar(menuBar);
add(panel);
setVisible(true)。
}
@Override; }
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(checkBox1)) {
slider1.setVisible(checkBox1.isSelected())。
}
}
}
這是我的主應用程式的螢屏:
uj5u.com熱心網友回復:
呼叫revalidate(),它應該能起到作用,在新添加的組件上呼叫它。https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/Component.html#revalidate()
但是我想說的是,像這樣的用例并不是選單的本意,為什么不使用對話框來處理動態組件呢?
對于背景https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/Component.html#revalidate()呼叫它o新添加的組件,看到https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/Component.html#invalidate()和https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/Container.html#isValidateRoot()
uj5u.com熱心網友回復:
隱藏和重新顯示彈出式選單將導致它的大小調整:
。
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(checkBox1)) {
slider1.setVisible(checkBox1.isSelected())。
menu.setPopupMenuVisible(false)。
menu.setPopupMenuVisible(true)。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/310258.html
標籤:

