搜索栏中的JPanel文本

时间:2013-07-22 14:13:24

标签: java search jpanel

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

JPanel包含长文字,我只需要实现一个只在搜索JPanel上搜索指定文字的“搜索栏”。

只需突出显示JPanel内的搜索文字

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

这是一张照片。

enter image description here

有可能吗?我怎么能这样做?

由于

1 个答案:

答案 0 :(得分:1)

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

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

Cobol Paragraph Structure

这是创建搜索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;
    }

}