1

スイングコンポーネントを使用して、できればハイライト機能を使用して、フレーム内のテキストファイルを開きたい。最初のフレームにファイルされたテキストでテキストファイルの名前を取得し、2番目のフレームでテキストファイルを開きたいです。私のコードは


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class FirstGUI extends JFrame {

private JLabel label;
private JTextField textfield;
private JButton button;

public FirstGUI() {
    setLayout(new FlowLayout());

    label = new JLabel("Enter the file path:");
    add(label);

    textfield = new JTextField();
    add(textfield);

    button = new JButton("Open");
    add(button);

    AnyClass ob = new AnyClass();
    button.addActionListener(ob);
}

public class AnyClass implements ActionListener {
    public void actionPerformed(ActionEvent obj) {
        //SecondGUI s =new SecondGUI();
        //s.setVisible(true);
    }
}

public static void main(String[] args) {

    FirstGUI obj= new FirstGUI();
    obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    obj.setSize(600,600);
    obj.setLocation(100,100);
    obj.setVisible(true);
}
}

2番目のフレームでテキストファイルを開くには、どのスイングコンポーネントを使用する必要がありますか?可能であれば、コードの概要を教えてください!!

4

4 に答える 4

3

mKorbel と Dans の回答の拡張:

まあ、あなたは次のJTextAreaように使うことができます:

ここに画像の説明を入力

import java.awt.BorderLayout;
import java.awt.Color;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.text.*;

public class LineHighlightPainter {

    String revisedText = "Hello, World! ";
    String token = "Hello";

    public static void main(String args[]) {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {

                @Override
                public void run() {
                    new LineHighlightPainter().createAndShowGUI();
                }
            });
        } catch (InterruptedException | InvocationTargetException ex) {
            ex.printStackTrace();
        }
    }

    public void createAndShowGUI() {
        JFrame frame = new JFrame("LineHighlightPainter demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTextArea area = new JTextArea(9, 45);
        area.setLineWrap(true);
        area.setWrapStyleWord(true);
        area.setText(revisedText);

        // Highlighting part of the text in the instance of JTextArea
        // based on token.
        highlight(area, token);

        frame.getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }

    // Creates highlights around all occurrences of pattern in textComp
    public void highlight(JTextComponent textComp, String pattern) {
        // First remove all old highlights
        removeHighlights(textComp);

        try {
            Highlighter hilite = textComp.getHighlighter();
            Document doc = textComp.getDocument();
            String text = doc.getText(0, doc.getLength());

            int pos = 0;
            // Search for pattern
            while ((pos = text.indexOf(pattern, pos)) >= 0) {
                // Create highlighter using private painter and apply around pattern
                hilite.addHighlight(pos, pos + pattern.length(), myHighlightPainter);
                pos += pattern.length();
            }

        } catch (BadLocationException e) {
            e.printStackTrace();
        }
    }

    // Removes only our private highlights
    public void removeHighlights(JTextComponent textComp) {
        Highlighter hilite = textComp.getHighlighter();
        Highlighter.Highlight[] hilites = hilite.getHighlights();

        for (int i = 0; i < hilites.length; i++) {
            if (hilites[i].getPainter() instanceof MyHighlightPainter) {
                hilite.removeHighlight(hilites[i]);
            }
        }
    }
    // An instance of the private subclass of the default highlight painter
    Highlighter.HighlightPainter myHighlightPainter = new MyHighlightPainter(Color.red);

    // A private subclass of the default highlight painter
    class MyHighlightPainter
            extends DefaultHighlighter.DefaultHighlightPainter {

        public MyHighlightPainter(Color color) {
            super(color);
        }
    }
}

または、代わりに a を使用し、次の方法JTextPaneでテキストを強調表示できます。

1) ドキュメント レベルで任意のテキスト パーツのスタイル属性を変更します。たとえば、次のようになります。

SimpleAttributeSet sas = new SimpleAttributeSet();
StyleConstants.setForeground(sas, Color.YELLOW);
doc.setCharacterAttributes(start, length, sas, false);

2) textPane レベルのハイライターを介してハイライトします。

DefaultHighlighter.DefaultHighlightPainter highlightPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
textPane.getHighlighter().addHighlight(startPos, endPos,highlightPainter);

参考文献:

于 2012-09-18T15:35:47.133 に答える
2

最も簡単な選択はJTextArea.

別のより良い選択はJEditorPane.

このテキスト コンポーネントのチュートリアルを参照して、それらをよりよく理解し、必要な最適なものを選択してください。

于 2012-09-18T13:02:59.467 に答える
2

見てきた

于 2012-09-18T13:03:23.757 に答える
1

JtextArea テキスト

fileInputStream myFIS;

objectInputStream myOIS(myFIS);

データ = myOIS.read();

text.setText(データ);

どこに行くべきか、何らかのアイデアが得られるはずです。ファイル入力ストリームにファイルの場所を設定することを忘れないでください。これにより、開くファイルがわかります。次に、ObjectInputStream がデータを取得し、その情報を Data というフィールドに保存します。次に、Data を情報として使用するように textArea を設定し、表示する textArea を「設定」します。

注: 使用できる入力ストリームは ObjectInputStream だけではありません。ファイルに関連する入力ストリームを使用する必要があります。

于 2012-09-18T13:04:17.440 に答える