2013-07-22 119 views
1

我写了一个java程序,它有一个CardLayoutJPanel为每张卡。搜索栏JPanel文本

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

它只是要突出搜索文本里面的JPanel

为了使它更清晰,我正在讨论Firefox的搜索栏(ctrl-f)的Chrome浏览器,但在我的程序中仅适用于一个JPanel

这是一张图片。

enter image description here

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

感谢

回答

1

最简单的方法是创建一个小的搜索JPanel,其定位文本JPanel以上。两个JPanel s将在另一个JPanel之内。我会使用JTextFieldJButton,因为我喜欢用户控制何时搜索。

下面是我的一个GUI搜索JPanel

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; 
    } 

}