Шустрый

Профиль
Группа: Участник
Сообщений: 61
Регистрация: 7.5.2007
Репутация: нет Всего: 0
|
powerOn, а как быть если всё происходит в дилоговом окне. Он после метода вообще перестаёт реагировать. А мне нужно в него ещё строчки писать. А код после setVisible(true) начинает выполнятся после закрытия JDialog. Наверное предоставлю исходник. Это окно аутентификации пользователя в которое я решил впихнуть ещё и статус загрузки файлов. Сорри реально много левого кода для понимания проблемы. Просто некогда переделывать. | Код | /* * To change this template, choose Tools | Templates * and open the template in the editor. */
package infobase;
import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*;
/** * * @author AndrewJobs */ public class Main {
/** * @param args the command line arguments */ public static void main(String[] args) { globalLookAndFeelChange(); ConnectionDialog dial = new ConnectionDialog(null); // dial.setDefaultCloseOperation(dial.DISPOSE_ON_CLOSE); } private static void globalLookAndFeelChange() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); // SwingUtilities.updateComponentTreeUI(this); } catch(Exception e) { e.printStackTrace(); } }
} class ConnectionDialog extends JDialog { public ConnectionDialog(JFrame owner) { super(owner); initComponents(); // loadProps(); setSize(normalSize); Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); setLocation(size.height / 2 - normalSize.height / 2, size.width / 2 - normalSize.width / 2); setTitle(title); setModal(true); setAlwaysOnTop(true); setResizable(false); setVisible(true); doResouceOperations(); } public void setLabel(boolean err, String label) { if(err) { errLabelColor = Color.RED; errLabel.setText("Ошибка: "+label); } else { errLabelColor = new Color(51, 102, 0); errLabel.setText("Загрузка файла: "+ label); } errLabel.setForeground(errLabelColor); } private void doResouceOperations() { Properties dBProp = new Properties(); connDialLoad = new ResourceLoader(this,dBProp,"database"); Properties infoProp = new Properties(); connDialLoad = new ResourceLoader(this,infoProp,"info"); } public void followError(Exception e) { errPanel.addMouseListener(new PanelMouseHandler()); errText.setText(""); errText.append("" + e); } private void sleep(int millis) { try{ Thread.sleep(millis);} catch(InterruptedException ignore){} } private void initComponents() { errPanel = new javax.swing.JPanel(); errLabel = new javax.swing.JLabel(); managePanel = new javax.swing.JPanel(); userLabel = new javax.swing.JLabel(); OK = new javax.swing.JButton(); Cancel = new javax.swing.JButton(); passField = new javax.swing.JPasswordField(); userName = new javax.swing.JTextField(); passLabel = new javax.swing.JLabel(); savePass = new javax.swing.JCheckBox(); textScroll = new javax.swing.JScrollPane(); errText = new javax.swing.JTextArea(); normalSize = new Dimension(360,185); largeSize = new Dimension(360,300);
setBounds(new java.awt.Rectangle(0, 0, 350, 290));
errPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
errLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); errLabel.setForeground(new java.awt.Color(51, 102, 0)); errLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); errLabel.setText("Готов");
javax.swing.GroupLayout errPanelLayout = new javax.swing.GroupLayout(errPanel); errPanel.setLayout(errPanelLayout); errPanelLayout.setHorizontalGroup( errPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(errPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(errLabel) .addContainerGap(284, Short.MAX_VALUE)) ); errPanelLayout.setVerticalGroup( errPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(errLabel) );
managePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Менеджер учётных записей", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11)));
userLabel.setText("Имя пользователя:");
OK.setText("ОК");
Cancel.setText("Отмена");
passLabel.setText("Пароль:");
savePass.setText("Сохранить пароль");
javax.swing.GroupLayout managePanelLayout = new javax.swing.GroupLayout(managePanel); managePanel.setLayout(managePanelLayout); managePanelLayout.setHorizontalGroup( managePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(managePanelLayout.createSequentialGroup() .addContainerGap() .addGroup(managePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(passLabel, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(userLabel, javax.swing.GroupLayout.Alignment.TRAILING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(managePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, managePanelLayout.createSequentialGroup() .addComponent(OK) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Cancel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)) .addGroup(managePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(passField, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(userName, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE))) .addContainerGap()) .addGroup(managePanelLayout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(savePass) .addGap(209, 209, 209)) );
managePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {Cancel, OK});
managePanelLayout.setVerticalGroup( managePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(managePanelLayout.createSequentialGroup() .addGroup(managePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(userLabel) .addComponent(userName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(managePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(managePanelLayout.createSequentialGroup() .addGroup(managePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(passLabel) .addComponent(passField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(managePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(OK) .addComponent(Cancel))) .addComponent(savePass))) );
errText.setColumns(20); errText.setRows(5); textScroll.setViewportView(errText); Font f = new Font("Serif",Font.PLAIN,14); errText.setFont(f); errText.setEditable(false);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(errPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(textScroll, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 332, Short.MAX_VALUE) .addComponent(managePanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 332, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(managePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(errPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(textScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) );
}
private javax.swing.JButton Cancel; private javax.swing.JButton OK; private javax.swing.JLabel errLabel; private javax.swing.JPanel errPanel; private javax.swing.JTextArea errText; private javax.swing.JPanel managePanel; private javax.swing.JPasswordField passField; private javax.swing.JLabel passLabel; private javax.swing.JScrollPane textScroll; private javax.swing.JLabel userLabel; private javax.swing.JTextField userName; private javax.swing.JCheckBox savePass; private String title; private Color errLabelColor; private Dimension normalSize, largeSize; private ResourceLoader connDialLoad; private class PanelMouseHandler extends MouseAdapter { public void mousePressed(MouseEvent e) { cursPos = e.getPoint(); if(errPanel.contains(cursPos)) errPanel.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.LOWERED)); } public void mouseReleased(MouseEvent e) { errPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); if(getSize().equals(normalSize)) { setSize(largeSize); } else setSize(normalSize); } private Point cursPos; } } class ResourceLoader { public ResourceLoader(ConnectionDialog connDial, Properties props, String filename) { IOException ex = loadProps(props, filename); if (ex == null) connDial.setLabel(false, filename); else { connDial.setLabel(true,"Не могу открыть: " + filename); connDial.followError(ex); } System.out.println("1"); try { Thread.sleep(2000); } catch(InterruptedException ignore){} System.out.println("2"); } private IOException loadProps(Properties props, String filename) { try { FileInputStream in = new FileInputStream(filename+".properties"); props.load(in); in.close(); } catch(IOException e) { return e; } return null; }
}
|
Кстати у Хорстмана пишется что методы компонентов Swing должны вызыватся только из потока доставки событий. А так как на практике организовать такой поток нереально, то он вызывает метод actionPerformed() таймера Swing который периодически опрашивает соответствующий поток и обновляет окошко. В том то и вопрос, безопасно ли воспользоватся просто Thread.sleep(); ?
|