Rumah > Java > Menyesuaikan JPopupMenu dalam JFileChooser: mengakses komponen dalaman

Menyesuaikan JPopupMenu dalam JFileChooser: mengakses komponen dalaman

王林
Lepaskan: 2024-02-09 11:27:09
ke hadapan
1001 orang telah melayarinya

Menyesuaikan JPopupMenu dalam JFileChooser ialah kaedah yang membolehkan kami mengakses komponen dalaman. Dengan cara ini kita boleh menambah menu pop timbul tersuai pada dialog pemilihan fail dan dapat beroperasi pada komponen dalaman. Teknik ini sangat berguna apabila menangani keperluan khusus, seperti menambah butang fungsi tambahan atau mengubah suai item menu lalai. Dalam artikel ini, editor PHP Xinyi akan memperkenalkan cara untuk mengakses komponen dalaman JFileChooser dengan menyesuaikan JPopupMenu untuk mencapai fungsi pemilihan fail yang lebih fleksibel dan diperibadikan. Mari lihat!

Kandungan soalan

Cara mengakses daripada JFileChooser 调用的 JPopupMenu 并自定义它(背景、前景、边框)?问题是弹出窗口是在 sun.swing.FilePane 内创建的,我无法访问它,因为默认情况下无法访问 sun.* 包。开发新的 FileChooser tidak boleh dilaksanakan kerana banyak kerja telah dilakukan. Adakah anda mempunyai sebarang idea?

Saya cuba mengulangi komponen bersarang tetapi ia tidak menghasilkan hasil kerana FilePane tidak dapat diimport. FilePane,因此没有产生任何结果。

解决方法

sun.swing.filepane 扩展了 jpanel,您可以搜索这个 jpanel 并获取 jpopupmenu

Solution🎜🎜sun.swing.filepane memanjangkan jpanel, anda boleh mencari jpanel ini dan dapatkan jpopupmenu. 🎜
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)));
  }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Menyesuaikan JPopupMenu dalam JFileChooser: mengakses komponen dalaman. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan