Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2010, 15:43   #1
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
Восклицание Не работают кнопки в апплете

Задание: Реализуйте апплет с цифровым отображением времени. Ваш апплет должен считывать параметры, указывающие частоту обновления таймера, а также шрифт, цвет и формат представления времени. (См. класс java.text.SimpleDateFormat для изучения механизма форматирования даты и времени в соответствии с заданным шаблоном.) Кроме того, добавьте метод getParameterInfo(), описывающий параметры апплета, которые вы определили, и измените метод getAppletInfo(), включив сообщение, описывающее ваше участие в создании апплета.
Не работают кнопки, помогите!!!
Код:
import java.awt.*; 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

public class myClock extends JApplet implements ActionListener, Runnable { 
	
	Label time; 
	DateFormat timeFormat; 
	Thread timer; 
	
	int speed = 1, color;
	
	JButton
	b1,b2,b3;

	TextField
	t1,t3;
	//JPanel panel;
	
	JCheckBox 
    cb1 = new JCheckBox("Формат");
	
	String sfont = "Arial";
	String [] allFonts = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
	//Font font = sfont;

volatile boolean running; 

public void init() {
	
	b1 = new JButton("Частота обновления"); 
    b2 = new JButton("Шрифт");
	b3 = new JButton("Цвет");
	t1 = new TextField();
	t3 = new TextField(14);
	
	Container cp = getContentPane();
    cp.setLayout(new FlowLayout());
    cp.add(t1);
    cp.add(b1);
    cp.add(b2);
    //cp.add(t3);
    //cp.add(b3); 
    //cp.add(cb1);
    
	b1.addActionListener(this);
	t1.addActionListener(this);
	b2.addActionListener(this);
	//t2.addActionListener(this);
	//b3.addActionListener(this);
	//t3.addActionListener(this);
	time = new Label(); 
	time.setFont(new Font(sfont, Font.BOLD, 12)); 
	time.setAlignment(Label.CENTER); 
	
	setLayout(new BorderLayout()); 
	add(time, BorderLayout.SOUTH); 
	timeFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM); 

	} 
public void actionPerformed(ActionEvent e) {

    //String str = ((JButton) e.getSource()).getText();

    if (e.getSource()== b1){ speed = Integer.parseInt(t1.toString());}
	  
    if (e.getSource() == b2)
    	b2 = (JButton) JOptionPane.showInputDialog(null,"Выбери шрифт","Изменение шрифта",JOptionPane.INFORMATION_MESSAGE,null,allFonts,allFonts[0]);
    	
    //if (e.getSource() == b3)
    
}

public void start() { 
	running = true; 
	if (timer == null) 
	{ 
		timer = new Thread(this); 
		timer.start(); 
	} 
} 

public void run() 
{ 
	while(running) 
	{ 
		time.setText(timeFormat.format(new Date())); 
		try { Thread.sleep(speed); } 
		catch (InterruptedException e) {} 
	} 
	timer = null; 
}

public void stop() { running = false; } 

public String[][] getParameterInfo() {	return super.getParameterInfo();}

public String getAppletInfo() { return "Clock applet Copyright (с) 2010 by Roman Homenko";} 
}
PastoriXx вне форума Ответить с цитированием
Старый 22.12.2010, 17:07   #2
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

Цитата:
Не работают кнопки, помогите!!!
Что именно не работает? (кнопок нету, кнопки не реагируют на нажатие, при нажатии выполняют не то что нужно...)
BleStaR вне форума Ответить с цитированием
Старый 22.12.2010, 17:13   #3
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
По умолчанию

убрал строку setLayout(new BorderLayout()); , кнопки стали появлятся,
в строчке
Код:
 if (e.getSource()== b1){ speed = Integer.parseInt(t1.toString());}
поменял t1.toString на t1.getText()[/quote]
Так же не работает изменение шрифта, выдает ошибки, типа:
Код:
Exception in thread "AWT-EventQueue-1" java.lang.ClassCastException: java.lang.String cannot be cast to javax.swing.JButton
    at myClock.actionPerformed(myClock.java:79)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

Последний раз редактировалось PastoriXx; 22.12.2010 в 17:20.
PastoriXx вне форума Ответить с цитированием
Старый 22.12.2010, 17:20   #4
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
Восклицание

убрал строку setLayout(new BorderLayout()); , кнопки стали появлятся,
в строчке
Код:
 if (e.getSource()== b1){ speed = Integer.parseInt(t1.toString());}
поменял t1.toString на t1.getText()[/quote]

Так же не работает изменение шрифта, выдает ошибки, типа:
Код:
Exception in thread "AWT-EventQueue-1" java.lang.ClassCastException: java.lang.String cannot be cast to javax.swing.JButton
    at myClock.actionPerformed(myClock.java:79)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
PastoriXx вне форума Ответить с цитированием
Старый 22.12.2010, 17:39   #5
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

советую не самому таймер описывать, а использовать javax.swing.Timer
BleStaR вне форума Ответить с цитированием
Старый 22.12.2010, 17:42   #6
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

вот изменения которые надо будет внести при использовании свинговского таймера

Код:
if (e.getSource()== b1){  timer.setDelay(Integer.parseInt(t1.getText()));}
в init запихай
Код:
timer = new Timer(100, new ActionListener(){
            public void actionPerformed(ActionEvent e){
                time.setText(timeFormat.format(new Date()));
            }
        });
        timer.start();
ну и само собой объяви поле Timer timer;
BleStaR вне форума Ответить с цитированием
Старый 23.12.2010, 04:05   #7
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
По умолчанию

сделал так:
Код:
import java.awt.*; 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import java.util.Date; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

public class myClock extends JApplet implements ActionListener, Runnable { 
	
	Label time; 
	DateFormat timeFormat; 
	Thread timer; 
	
	int speed = 1, color;
	
	JButton
	b1,b2,b3;

	TextField
	t1,t3;
	//JPanel panel;
	
	JCheckBox 
    cb1 = new JCheckBox("Формат");
	
	Object sfont = "Arial";
	Object scolor = "Black";
	String [] allFonts = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
	//String [] allСolors = {};
	//Font font = sfont;

volatile boolean running; 

public void init() {
	
	setLayout(new BorderLayout());
	setSize(510, 120);
	setMinimumSize(new Dimension (510, 120));
	
	b1 = new JButton("Частота обновления"); 
    b2 = new JButton("Шрифт");
	b3 = new JButton("Цвет");
	t1 = new TextField();
	t3 = new TextField(14);
	
	Container cp = getContentPane();
    cp.setLayout(new FlowLayout());
    cp.add(t1);
    cp.add(b1);
    cp.add(b2);
    cp.add(t3);
    cp.add(b3); 
    //cp.add(cb1);
    
	b1.addActionListener(this);
	t1.addActionListener(this);
	b2.addActionListener(this);
	//t2.addActionListener(this);
	b3.addActionListener(this);
	t3.addActionListener(this);
	time = new Label(); 
	time.setFont(new Font((String)sfont, Font.BOLD, 55)); 
	time.setAlignment(Label.CENTER); 
	
	//setLayout(new BorderLayout()); 
	add(time, BorderLayout.SOUTH); 
	timeFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM); 

	} 
public void actionPerformed(ActionEvent e) {

    //String str = ((JButton) e.getSource()).getText();

    if (e.getSource()== b1){ speed = Integer.parseInt(t1.getText());}
	  
    if (e.getSource() == b2)
    {
    	sfont =  JOptionPane.showInputDialog(null,"Выбери шрифт","Изменение шрифта",JOptionPane.INFORMATION_MESSAGE,null,allFonts,allFonts[0]);
    	time.setFont(new Font((String) sfont, Font.BOLD, 53));
    }
    if (e.getSource() == b3)
    {
    	//scolor = JOptionPane.showInputDialog(null,"Выбери цвет","Изменение цвета",JOptionPane.INFORMATION_MESSAGE,null,allСolors,allСolors[0]);
    	//switch (scolor)
    	 //{
    	  // case "black"  : e.setColor(Color.black); break;
    	   //case "blue"   : e.setColor(Color.blue); break;
    	   //case "yellow" : e.setColor(Color.yellow); break;
    	  // default: g.setColor(Color.black); break;

    	 //}
    }
}

public void start() { 
	running = true; 
	if (timer == null) 
	{ 
		timer = new Thread(this); 
		timer.start(); 
	} 
} 

public void run() 
{ 
	while(running) 
	{ 
		time.setText(timeFormat.format(new Date()));
		//time.setFont(new Font((String)sfont, Font.BOLD, 55)) ;
		try { Thread.sleep(speed*1000); } 
		catch (InterruptedException e) {} 
	} 
	timer = null; 
}

public void stop() { running = false; } 

public String[][] getParameterInfo() {	
	return pinfo;}

String pinfo[][] = {
			 {"Частота","int","Частота обновления таймера"},
			 {"Шрифт","Font","Используемый шрифт"},
			 {"Цвет","","Применяемый цвет"},
			 {"Формат даты","",""}
		 };

public String getAppletInfo() { return "Clock applet Copyright (с) 2010 by Roman Homenko ";} 
}
PastoriXx вне форума Ответить с цитированием
Старый 23.12.2010, 04:05   #8
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
По умолчанию

Все равно не пашет, но и ошибки не выдает
PastoriXx вне форума Ответить с цитированием
Старый 23.12.2010, 08:05   #9
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

вот класс выбора шрифтов (т.к. стандартного не имеется)
Код:
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
* Диалог выбора шрифта с возможностью предварительного просмотра.
* @author Старовъръ
*/
public class FontChooser extends JDialog implements ActionListener {
    // Признак подтверждения пользователем выбора шрифта.
    private boolean ok = false;
    // Названия доступных шрифтов.
    private String[] fontName = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
    // Поле предварительного просмотра.
    private JTextField textField;
    // Флаги выбора атрибутов шрифта - полужирный / курсив.
    private JCheckBox boldBox, italicBox;
    private JLabel nameLabel, sizeLabel;
    // Размеры шрифтов.
    private String[] sizeArray;
    // Меню выбора названия шрифта и его размера.
    private JComboBox nameComboBox, sizeComboBox;
    // Кнопки ОК, Отмена.
    private JButton okButton, cancelButton;
    // Выбранный шрифт.
    private Font font;

    /**
     * Создает диалоговое окно выбора шрифта.
     * @param owner родительский фрейм.
     */
    public FontChooser(JFrame owner) {
        super(owner, "Choose Font", true);
        addWindowListener(new WindowListener());
        setVisible(false);
        setSize(240, 305);
        setResizable(false);
        setLocationRelativeTo(owner);
        setLayout(null);
        //********Buttons**********
        okButton = new JButton("Ok");
        cancelButton = new JButton("Cancel");
        JPanel butPanel = new JPanel();
        butPanel.setBounds(10, 240, 239, 100);
        butPanel.add(okButton);
        butPanel.add(cancelButton);
        okButton.addActionListener(this);
        cancelButton.addActionListener(this);
        add(butPanel);
        //*********LABEL***********
        nameLabel = new JLabel("Font");
        sizeLabel = new JLabel("Size");

        nameLabel.setBounds(10, 10, 40, 10);
        sizeLabel.setBounds(160, 10, 40, 10);

        add(nameLabel);
        add(sizeLabel);
        //**********JLIST*************
        nameComboBox = new JComboBox(fontName);
        sizeComboBox = new JComboBox(getSizes());
        sizeComboBox.addActionListener(this);
        nameComboBox.addActionListener(this);
        nameComboBox.setBounds(10, 30, 140, 20);
        sizeComboBox.setBounds(160, 30, 60, 20);
        add(nameComboBox);
        add(sizeComboBox);
        //*********CheckBox************
        boldBox = new JCheckBox("BOLD");
        italicBox = new JCheckBox("ITALIC");
        boldBox.addActionListener(this);
        italicBox.addActionListener(this);
        JPanel boxPanel = new JPanel();
        boxPanel.setLayout(new GridLayout(1, 2));
        boxPanel.setBounds(30, 60, 150, 60);
        boxPanel.add(boldBox);
        boxPanel.add(italicBox);
        Border etched = BorderFactory.createEtchedBorder();
        Border titled = BorderFactory.createTitledBorder(etched, "Style");
        boxPanel.setBorder(titled);
        add(boxPanel);
        //*******TextField*********
        textField = new JTextField();
        textField.setFont(new Font(fontName[0], Font.PLAIN, 5));
        textField.setBounds(35, 150, 150, 50);
        textField.setAlignmentX(textField.getSize().width / 2);
        textField.setEditable(false);
        textField.setText("AaBbCc");
        add(textField);
    }

    /**
     * Слушатель событий окна.
     */
    class WindowListener extends WindowAdapter {
        /**
         * Вызывается при закрытии окна.
         * @param e событие окна.
         */
        public void windowClosed(WindowEvent e) {
            ok = false;
        }
    }
BleStaR вне форума Ответить с цитированием
Старый 23.12.2010, 08:05   #10
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

продолжение класса выбора шрифтов
Код:
    /**
     * Создает и возвращает массив размеров шрифтов <code>[5, 39]</code>
     * @return массив размеров шрифтов.
     */
    private String[] getSizes() {
        if(sizeArray == null) {
            sizeArray = new String[35];
            for(int i = 5; i < 40; i++)
                sizeArray[i - 5] = String.valueOf(i);
        }
        return sizeArray;
    }

    /**
     * Вызывается при нажатии на кнопку.
     * @param e событие.
     */
    public void actionPerformed(ActionEvent e) {
        setProperties();
        if(e.getSource() == okButton) {
            ok = true;
            setVisible(false);
        }
        if(e.getSource() == cancelButton) {
            ok = false;
            setVisible(false);
        }
    }

    /**
     * Устанавливает выбранный шрифт тексту в поле предварительного просмотре.
     */
    private void setProperties() {
        int style = 0;
        if(boldBox.isSelected())
            style += Font.BOLD;
        if(italicBox.isSelected())
            style += Font.ITALIC;
        String[] size = getSizes();
        font = new Font(fontName[nameComboBox.getSelectedIndex()], style,
                Integer.parseInt(size[sizeComboBox.getSelectedIndex()]));
        textField.setFont(font);
    }

    /**
     * Показывает диалоговое окно выбора шрифта.
     * @return <code>true</code>, если пользователь подтвердил выбор шрифта, иначе <code>false</code>.
     */
    public boolean showDialog() {
        setVisible(true);
        return ok;
    }

    /**
     * Возвращает выбранный шрифт.
     * @return выбранный шрифт.
     */
    public Font getFont() {
        return font;
    }

    /**
     * Тестирует диалоговое окно выбора шрифта.
     * @param args аргументы командной строки.
     */
    public static void main(String[] args) {
        FontChooser fontChooser = new FontChooser(null);
        fontChooser.showDialog();
    }
}
BleStaR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работают кнопки управления окном Liservik Microsoft Office Word 0 08.11.2010 21:50
не работают визиблы crit Общие вопросы Delphi 12 09.06.2009 01:52
Наложение html на swf. Не работают кнопки в swf. starro_serge HTML и CSS 2 04.03.2009 12:28
UCOZ: Кнопки кнопки на изображении ReDuX HTML и CSS 19 25.04.2008 02:39
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35