1

我的大部分代码都在工作。我只需要创建一个非常小的配置对话框(输入一些文本作为此应用程序的路径。(日志文件监视器)

它几乎就在那里,文本字段出现在 jscrollpane 上(效果很好)。但我无法在文本字段中输入任何文本。我想不通。

请帮忙。

package vlive;
/* 
    vTABLET - a Virtual Desktop Tablet.
    http://www.splashportal.net
    Copyright (C) 2012  Aubrey Bourke.

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

    Contact: (Author) Aubrey Bourke - aubrey@splashportal.net
    */

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.RoundRectangle2D;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.swing.*;
import javax.imageio.ImageIO;
import javax.swing.JWindow;
import java.awt.image.*;
import  sun.audio.*;    //import the sun.audio package
import  java.io.*;
import java.util.Timer;
import java.util.*;
import javax.swing.border.Border;
import javax.swing.text.DefaultCaret;
import javax.swing.text.Document;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.StyleSheet;

class vLive extends JPanel implements MouseListener, MouseMotionListener{

    Point location;  
    MouseEvent pressed;
      File file;
      static vLive vlc;
        //static vTablet vlive;
    //vLiveConsole var's
    Shape shape;
    Dimension arcSize;
    BufferedImage splash, logo;
    JWindow vLiveConsoleWindow;
    Float transparency = 0.00f;
    Boolean isGreenLine=false;
    int line;
    Boolean isSplash = true;
        static Boolean isLiveLog = false;
        boolean isConfig;

        JTextField input;
        JTextPane textPane;
        HTMLEditorKit htmlEditorKit;
        BufferedReader daLog;
        String LogString;
        Document document;
        JScrollPane scrollPane;

        String osVersion;
        String status;

        //CONSTRUCTOR
    //@SuppressWarnings("restriction")
    public vLive(){

            Tray();



        //create the vTablet OSD
    Dimension arcSize = new Dimension(16, 16);
    shape = new RoundRectangle2D.Double(0d, 0d, 670, 199, arcSize.width, arcSize.height);
    vLiveConsoleWindow = new JWindow();

        setSize(650, 199);

    loadImages();
        roundTheFrame();


    //add this JPanel (LiveLog)
    vLiveConsoleWindow.add(this);

    vLiveConsoleWindow.addMouseListener(this);
    vLiveConsoleWindow.addMouseMotionListener(this);
    vLiveConsoleWindow.setSize(670, 199);
    //vLiveConsoleWindow.setLocation(10, 10);
    vLiveConsoleWindow.setLocationRelativeTo(null);

        vLiveConsoleWindow.setVisible(true);



      //start a chain call!
    fadein();
        //1. fadein -> jetstart -> greenbar

         try{
        //keep logo visible after greenbar disappears
        Thread.sleep(4000);
        isSplash=false;




        isLiveLog=true;
        repaint();

        String os_version = System.getProperty("os.name").toLowerCase();
        osVersion = os_version;
        System.out.println("[System: "+os_version.toUpperCase()+"]");

        if(os_version.startsWith("win")){
        file = new File("C:/Windows/WindowsUpdate.log");
        status=file.toString();
        }

        if(os_version.startsWith("linux")) {

                file = new File("/var/log/messages");
                status = file.toString();

                if(!file.exists())
                file = new File("/var/log/syslog");
                status = file.toString();
        }










        //start Log Monitor
        TimerTask task = new FileWatcher( new File(file.getAbsolutePath()) ) {
      protected void onChange( File file ) {
        // here we code the action on a change
        //System.out.println( "File "+ file.getName() +" have changed !" );
        isLiveLog=true;
        updateLog();
      }
    };
                java.util.Timer timer = new Timer();
    // repeat the check every second
    timer.schedule( task , new Date(), 1000 );




        //load the Log to use
        //daLog = new File("/var/log/syslog");


        //add a textpane to JWindow
        textPane = new JTextPane();

        textPane.addMouseListener(this);
        textPane.addMouseMotionListener(this);

        scrollPane = new JScrollPane(textPane, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        //DefaultCaret caret = (DefaultCaret)textPane.getCaret();
        //caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

        textPane.setEditable(false);
        textPane.setOpaque(false);
        scrollPane.setOpaque(false);
        scrollPane.getViewport().setOpaque(false);


            htmlEditorKit = new HTMLEditorKit();
            textPane.setEditorKit(htmlEditorKit);
            // add some styles to the html
            StyleSheet styleSheet = htmlEditorKit.getStyleSheet();
            styleSheet.addRule("body {font: italic bold 6px Sans;}");
            styleSheet.addRule("body {color:#585858;}");
            textPane.setContentType("text/html");

                        textPane.setSize(630, 165);
                        scrollPane.setSize(631, 165);

                         scrollPane.setVisible(true);
                        this.setLayout(null);
                        this.add(scrollPane);
                        this.scrollPane.setLocation(20, 15);
       //textPane.setLocation(0, 0);
                       revalidate();
        //textPane.setText("Hello there\n anybody see this text??\n");

                        updateLog();

        }catch(InterruptedException e){System.out.println(e);}



}
        public void roundTheFrame(){
        try{
    vLiveConsoleWindow.addComponentListener(new ComponentAdapter() {
        @SuppressWarnings("restriction")
        @Override
        public void componentResized(ComponentEvent e){
            com.sun.awt.AWTUtilities.setWindowShape(vLiveConsoleWindow, shape);


        }});
        } catch (SecurityException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            } catch (IllegalArgumentException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }
        }
        public synchronized void updateLog(){
                //print the log


            Runnable updateAComponent = new Runnable() {
                public void run() { 


        if(isLiveLog){
              isLiveLog=false;

            System.out.println("[Log Update Event]".toUpperCase());
        try {
        document = textPane.getDocument();

        /*
        StyleSheet styleSheet = htmlEditorKit.getStyleSheet();
        styleSheet.addRule("body {font: italic bold 6px Sans;}");
        styleSheet.addRule("body {color:#585858;}");
        textPane.setContentType("text/html");
        */

        daLog =  new BufferedReader(new FileReader(file));
            try{
                String line = null; //not declared within while loop
                LogString = new String();

                while (( line = daLog.readLine()) != null){




  document.insertString(document.getLength(),line+"\n",null);

                                    //LogString+=line+"\n";
                }
            }finally {
                daLog.close();}
        }catch(Exception e){System.out.println(e);}

        //System.out.println(LogString);

        textPane.select(textPane.getDocument().getLength(), textPane.getDocument().getLength());

       revalidate();


         //textPane.setLocation(0, 0);

            } }
            };
            SwingUtilities.invokeLater(updateAComponent);

        }
        public void loadImages(){
        try 
     {
         String filename = "/images/vLive-Console-Logo.png";
     InputStream is = vLive.class.getResourceAsStream(filename);
         logo = ImageIO.read(is);
     }catch (IOException e) 
                           {
                System.out.println("[Image load error]");
                                }
    try 
     {
     String filename = "/images/vLive-Console.png";
     InputStream is = vLive.class.getResourceAsStream(filename);
         splash = ImageIO.read(is);      
     }catch (IOException e) 
                           {
                    System.out.println("[Image load error]");
                               }
        }

    @SuppressWarnings("restriction")
    public void sfx(){
        try {
            InputStream in;
            //in = new FileInputStream("jetstart2.wav");
            in = vLive.class.getResourceAsStream("/sounds/jetstart2.wav");  

        // Create an AudioStream object from the input stream.
        @SuppressWarnings("restriction")
        AudioStream as = new AudioStream(in);         

        // Use the static class member "player" from class AudioPlayer to play
        // clip.
        AudioPlayer.player.start(as);            
    }catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    public void fadein(){
        //chain 1 -> fade in
            while (transparency<0.9999955f){
                transparency +=0.000005f;
                //System.out.println(transparency);
                repaint();
            }
            transparency=1.0f;
            repaint();

        //chain 2 -> jetstart2.wav
            sfx();

        //chain 3 -> green barrr    
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            greenline();
    }
    public void greenline(){
        //line=80;
        line=30;
        isGreenLine = true;
        while(line<380){
            line++;
            repaint();
            try{
            Thread.sleep(4);
            }catch(InterruptedException e){System.out.println(e);}}
        try{
            Thread.sleep(2050);
            }catch(InterruptedException e){System.out.println(e);}
        isGreenLine=false;
        repaint();
    }

    public void fadeout(){
        //fade out
        while (transparency>0.01){
            transparency -=0.000007f;
            System.out.println(transparency);
            repaint();
        }
    }

    public void paintComponent(Graphics g) {

        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        // Enable antialiasing for text
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.drawImage(splash, 0, 0, null);

                if(isSplash){
        Composite comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, transparency);
        g2d.setComposite(comp);
        g2d.drawImage(logo, null, 0, 1);    
        if(isGreenLine){
            g2d.setColor(Color.GREEN);
            //g2d.setColor(new Color(0x1e, 0x90, 0xff));

            g2d.setStroke(new BasicStroke(7));
            g2d.drawLine(30, 158, line, 158);
            g2d.setStroke(new BasicStroke(1));
            g2d.setColor(Color.BLACK);
            g2d.drawRect(26,154, line-22, 7);


            /*g2d.setStroke(new BasicStroke(7));
            g2d.drawLine(80, 125, line, 125);
            g2d.setStroke(new BasicStroke(1));
            g2d.setColor(Color.BLACK);
            g2d.drawRect(76,121, line-72, 7);*/
        }
        }
                if(isLiveLog){
                //System.out.println("isLiveLog - Empty Paint() block!");
                    Font tmp = new Font("Sans", Font.ITALIC+Font.BOLD, 10);    
                    g2d.setFont(tmp);
                    g2d.setColor(Color.GRAY.darker());
                    g2d.drawString("SYSTEM: "+osVersion.toUpperCase(), 30, 145);

                    g2d.drawString("LOGFILE: "+status.toUpperCase(), 30, 156);
                    g2d.drawString("INITIALIZING LIVE LOG-REPORTING...", 30, 167);
                }
                if(isConfig){

                    System.out.println("[Repaint...");


                }
    }

    public void mouseMoved(MouseEvent e) {

    }
    public void mouseDragged(MouseEvent e) {

         location = vLiveConsoleWindow.getLocation(location);  
         int x = location.x - pressed.getX() + e.getX();  
        int y = location.y - pressed.getY() + e.getY();  
        vLiveConsoleWindow.setLocation(x, y);

    }
    public void mouseClicked(MouseEvent e) {
         if(e.getButton()==3){
             System.out.println("[CONFIG]");
             isConfig=true;

             JPanel p2 = new JPanel();
             p2.setBackground(Color.GRAY);
             p2.setSize(300,20);

             input = new JTextField(40);
             input.setOpaque(false);
             input.setSize(300, 20);
             input.setForeground(Color.WHITE);


             input.setLocation(0, 0);
             p2.add(input);

             //Maybe add a POPUP instead!!!!             

             vLiveConsoleWindow.add(p2);
             p2.setLocation(40, 150);
             input.requestFocusInWindow();

             System.out.println(input.isEditable() + " " +input.isEnabled());
             input.setText("your path..");




             input.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {


                String tex = input.getText();
                System.out.println(tex);
        }
      });

         }

    }
    public void mouseEntered(MouseEvent e) {
    //search.requestFocus();
    }
    public void mouseExited(MouseEvent e) {
    //search.requestFocus(); 


    }
    public void mousePressed(MouseEvent e) {

        if(e.getButton()==1) 
        pressed = e; 
    }
    public void mouseReleased(MouseEvent e) {

    }

        public void Tray(){    
            System.out.println("[ACTIVATING TRAY ICON]");
            Image kimage=null;
            final TrayIcon trayIcon;

if (SystemTray.isSupported()) {
System.out.println("[SYSTEM TRAY SUPPORTED!]");
    try {
             String filename = "/images/vLive.png";
     InputStream is = vLive.class.getResourceAsStream(filename);
         kimage = ImageIO.read(is);      


    }catch (Exception e) {

            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    SystemTray tray = SystemTray.getSystemTray();
    //timage = Toolkit.getDefaultToolkit().getImage("res/CrossOfLife.png");

    MouseListener mouseListener = new MouseListener() {

        public void mouseClicked(MouseEvent e) {
            //System.out.println("Tray Icon - Mouse clicked!");                 
        }

        public void mouseEntered(MouseEvent e) {
            //System.out.println("Tray Icon - Mouse entered!");                 
        }

        public void mouseExited(MouseEvent e) {
            //System.out.println("Tray Icon - Mouse exited!");                 
        }

        public void mousePressed(MouseEvent e) {
            //System.out.println("Tray Icon - Mouse pressed!");                 
        }

        public void mouseReleased(MouseEvent e) {
            //System.out.println("Tray Icon - Mouse released!");                 
        }
    };

    ActionListener exitListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.out.println("[Saving vTablet Screen Co-ordinates]".toUpperCase());

                      try{
                      FileWriter fw = new FileWriter("Config");
                      BufferedWriter bw = new BufferedWriter(fw);

                     int vx = vLiveConsoleWindow.getX();
                     int vy = vLiveConsoleWindow.getY();

                      bw.write(vx+"\n");
                      bw.write(vy+"\n");

                      bw.flush();
                      fw.close();

                      }catch(IOException eyecaptain){System.out.println("[Co-ordinate save error: "+eyecaptain+"]".toUpperCase());}


                      System.out.println("[Exiting...]".toUpperCase());
                      System.out.println("");
                      System.exit(0);
        }
    };

    ItemListener cbListener = new ItemListener() {
       public void itemStateChanged(ItemEvent e) { 
           Object source = e.getItemSelectable();
System.out.println(source);
           if (e.getItem().equals("vTablet-OSD"))
               System.out.println("Chek....");

    if (e.getStateChange() == ItemEvent.SELECTED){


        }

    if (e.getStateChange() == ItemEvent.DESELECTED){

        }

        }
    };


    PopupMenu popup = new PopupMenu();

    // Create a pop-up menu components
        MenuItem aboutItem = new MenuItem("About");
        CheckboxMenuItem cb1 = new CheckboxMenuItem("vTablet-OSD");
        cb1.setActionCommand("vTablet-OSD");
        cb1.addItemListener(cbListener);
        CheckboxMenuItem cb2 = new CheckboxMenuItem("VTab");
        CheckboxMenuItem cb3 = new CheckboxMenuItem("vTablet");
        Menu displayMenu = new Menu("Configuration");
        MenuItem errorItem = new MenuItem("Error");
        MenuItem warningItem = new MenuItem("Warning");
       MenuItem infoItem = new MenuItem("Info");
       MenuItem noneItem = new MenuItem("None");
        MenuItem exitItem = new MenuItem("Exit");

        //Add components to pop-up menu
        popup.add(aboutItem);
        popup.addSeparator();
        popup.add(cb1);
        popup.add(cb2);
        popup.add(cb3);
        popup.addSeparator();
        popup.add(displayMenu);
        displayMenu.add(errorItem);
        displayMenu.add(warningItem);
        displayMenu.add(infoItem);
        displayMenu.add(noneItem);
       // popup.add(exitItem);

    MenuItem defaultItem = new MenuItem("Exit");
    defaultItem.addActionListener(exitListener);
    popup.add(defaultItem);

    Font font3=new Font("Monospace", Font.ITALIC, 14);
    popup.setFont(font3);

    trayIcon = new TrayIcon(kimage, "vLive", popup);

    ActionListener actionListenerA = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            trayIcon.displayMessage("Action Event", 
                "An Unimplemented Action Event Has Been Performed!",
                TrayIcon.MessageType.INFO);
            if(e.getActionCommand().equals("vTablet-OSD"))
            {System.out.println("[OSD Toggle!]".toUpperCase());}


        }
    };

   trayIcon.setImageAutoSize(true);
    popup.addActionListener(actionListenerA);
    trayIcon.addMouseListener(mouseListener);

    try {

        System.out.println("Tray Disabled");

    } catch (Exception e) {
        System.err.println("[TrayIcon could not be added.]".toUpperCase());
    }

} else {
    System.out.println("[Tray not supported!]".toUpperCase());

}
        }
    public static void main(String[] args){
                System.out.println("======================================");
        System.out.println("vLive Log-Report Console".toUpperCase());
                System.out.println("[Created by Aubrey Bourke]");
                System.out.println("[WEB: http://www.splashportal.net]".toUpperCase());
        System.out.println("======================================");

        Thread t = new Thread( new Runnable(){
            public void run()
            {
                vlc = new vLive(); //vTablet OSD
            }
                 });
            t.start();      
        }
}
4

0 回答 0