Table of Contents
Question content
Solution
Home Java Customizing JPopupMenu in JFileChooser: accessing internal components

Customizing JPopupMenu in JFileChooser: accessing internal components

Feb 09, 2024 am 11:27 AM

Customizing JPopupMenu in JFileChooser is a method that allows us to access internal components. This way we can add a custom popup menu to the file selection dialog and be able to operate on the internal components. This technique is very useful when dealing with specific needs, such as adding additional function buttons or modifying the default menu items. In this article, PHP editor Xinyi will introduce how to access the internal components of JFileChooser by customizing JPopupMenu to achieve a more flexible and personalized file selection function. Let’s take a look!

Question content

How to access the JPopupMenu called from JFileChooser and customize it (background, foreground, border)? The problem is that the popup is created inside sun.swing.FilePane and I cannot access it because sun.* packages are not accessible by default. Developing a new FileChooser is not feasible because a lot of work has already been done. Do you have any ideas?

I tried iterating over the nested components but that produced no results since FilePane could not be imported.

Solution

sun.swing.filepane extends jpanel, you can search this jpanel and get jpopupmenu.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

import java.awt.*;

import java.util.Objects;

import java.util.stream.Stream;

import javax.swing.*;

 

public class FileChooserPopupMenuTest {

  public static void main(String[] args) {

    EventQueue.invokeLater(() -> {

      JFileChooser chooser = new JFileChooser();

      descendants(chooser)

          .filter(JPanel.class::isInstance)

          .map(c -> ((JPanel) c).getComponentPopupMenu())

          .filter(Objects::nonNull)

          .findFirst()

          .ifPresent(popup -> {

            popup.addSeparator();

            popup.add(new JCheckBoxMenuItem("JCheckBoxMenuItem"));

          });

      chooser.showOpenDialog(null);

    });

  }

 

  public static Stream<Component> descendants(Container parent) {

    return Stream.of(parent.getComponents())

        .filter(Container.class::isInstance)

        .map(Container.class::cast)

        .flatMap(c -> Stream.concat(Stream.of(c), descendants(c)));

  }

}

Copy after login

The above is the detailed content of Customizing JPopupMenu in JFileChooser: accessing internal components. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)