1

我写了一个java程序,每张卡都有CardLayout一个JPanel

包含长JPanel文本,我只需要实现一个小“搜索栏”,它只搜索已查看的指定文本JPanel

它只需要突出显示JPanel.

为了更清楚,我说的是类似于 Chrome 的 Firefox 搜索栏(ctrl-f),但这仅适用JPanel于我的程序中的一个。

这是一张图片。

在此处输入图像描述

可能吗?我怎样才能做到这一点?

谢谢

4

1 回答 1

1

最简单的方法是创建一个JPanel位于文本上方的小型搜索JPanel。两个JPanels 都在另一个 s 内JPanel。我会使用 aJTextField和 a JButton,因为我喜欢用户控制何时搜索。

这是我的一个带有搜索的 GUI JPanel

Cobol 段落结构

这是创建搜索的代码JPanel。请注意,我使用了JPanel. 仅当您想要覆盖组件方法之一时才扩展 Swing 组件。

package gov.bop.cobol.paragraph.structure.view;

import gov.bop.cobol.paragraph.structure.model.ParagraphStructureModel;
import gov.bop.cobol.paragraph.structure.thread.SearchActionThread;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class SearchPanel {

    protected JPanel                    panel;

    protected JTextField                findTextField;

    protected ParagraphStructureFrame   frame;

    protected ParagraphStructureModel   model;

    public SearchPanel(ParagraphStructureFrame frame,
            ParagraphStructureModel model) {
        this.frame = frame;
        this.model = model;
        createPartControl();
    }

    protected void createPartControl() {
        panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
        panel.setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));

        JLabel findLabel = new JLabel("Search:");
        panel.add(findLabel);

        panel.add(Box.createRigidArea(new Dimension(6, 0)));

        findTextField = new JTextField(30);
        panel.add(findTextField);

        panel.add(Box.createRigidArea(new Dimension(6, 0)));

        JButton findButton = new JButton("Search");
        findButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                String s = findTextField.getText().toUpperCase().trim();
                if (!s.equals("")) {
                    findTextField.setText(s);
                    Thread thread = new Thread(new SearchActionThread(frame,
                            model, s));
                    thread.start();
                }
            }
        });
        panel.add(findButton);
    }

    public JPanel getPanel() {
        return panel;
    }

}
于 2013-07-22T14:36:32.800 回答