Java Swing

Материал из SEWiki
Перейти к: навигация, поиск

Что почитать

Слайды с лекции

Ссылка 1

Ссылка 2

Ссылка 3

1. TestFrame

import javax.swing.*;

public class testFrame {
	public static void main (String [] args) {
		JFrame myWindow = new JFrame("Пробное окно");
		myWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		myWindow.setSize(400, 300);
		myWindow.setVisible(true);
	}
}

2. TestFrame2

import javax.swing.JFrame;

class SimpleWindow extends JFrame {
	SimpleWindow() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 300);
	}
}

public class testFrame2 {
	public static void main (String [] args) {
		JFrame myWindow = new SimpleWindow();
		myWindow.setVisible(true);
	}
}

3. Button

import javax.swing.JButton;
import javax.swing.JFrame;

class SimpleWindowButton extends JFrame {
	SimpleWindowButton() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 300);
		JButton newButton = new JButton("Жмакни меня");
		getContentPane().add(newButton);
	}
}

public class testFrameButton {
	public static void main (String [] args) {
		JFrame myWindow = new SimpleWindowButton();
		myWindow.setVisible(true);
	}
}

4. Layouts

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

class SimpleWindowFlow extends JFrame {
	SimpleWindowFlow() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 300);
		JPanel panel = new JPanel();
		panel.setLayout(new FlowLayout());
		panel.add(new JButton("Кнопка"));
		panel.add(new JButton("+"));
		panel.add(new JButton("-"));
		panel.add(new JButton("Кнопка с длинной надписью"));
		setContentPane(panel);
	}
}

class SimpleWindowBorder extends JFrame {
	SimpleWindowBorder() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 300);
		getContentPane().add(new JButton("NORTH"), BorderLayout.NORTH);
		getContentPane().add(new JButton("EAST"), BorderLayout.EAST);
		getContentPane().add(new JButton("SOUTH"), BorderLayout.SOUTH);
		getContentPane().add(new JButton("WEST"), BorderLayout.WEST);
		getContentPane().add(new JButton("В ЦЕНТР!"));
	}
}

class SimpleWindowGrid extends JFrame {
	SimpleWindowGrid() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 300);
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(2, 3, 5, 10));
		panel.add(new JButton("Кнопка"));
		panel.add(new JButton("+"));
		panel.add(new JButton("-"));
		panel.add(new JButton("Кнопка с длинной надписью"));
		panel.add(new JButton("еще кнопка"));
		setContentPane(panel);
	}	
}


class SimpleWindowBox extends JFrame {
	SimpleWindowBox() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//		setSize(400, 300);
		Box box = Box.createVerticalBox();
		box.add(new JButton("Кнопка"));
		box.add(Box.createVerticalStrut(10));
		box.add(new JButton("+"));
		box.add(Box.createVerticalGlue());
		
		JButton rightButton = new JButton("-");
		rightButton.setAlignmentX(JComponent.RIGHT_ALIGNMENT); 
		box.add(rightButton);
		
		box.add(Box.createVerticalStrut(10));
		box.add(new JButton("Кнопка с длинной надписью"));
		setContentPane(box);
		pack();
	}	
}

class SimpleWindowManual extends JFrame {
	SimpleWindowManual() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 300);
		JPanel panel = new JPanel();
		panel.setLayout(null);
		JButton button = new JButton("Кнопка");
		button.setSize(80, 30);
		button.setLocation(20,20);
		panel.add(button);
		button = new JButton("Кнопка с длинной надписью");
		button.setSize(120, 40);
		button.setLocation(70,50);
		panel.add(button);
		setContentPane(panel);
	}	
}

public class testFramePanel {
	public static void main (String [] args) {
		JFrame myWindow = new SimpleWindowBorder();
		myWindow.setVisible(true);
	}
}

5. Обрамление

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.*;

class SimpleWindowPanelBorder extends JFrame {
	SimpleWindowPanelBorder() {
		super("Пробное окно");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(2,3,5,10));
		panel.add(createPanel(new TitledBorder("Рамка с заголовком"), "TitledBorder"));
		panel.add(createPanel(new EtchedBorder(), "EtchedBorder"));
		panel.add(createPanel(new BevelBorder(BevelBorder.LOWERED), "BevelBorder"));
		panel.add(createPanel(new SoftBevelBorder(BevelBorder.RAISED), "SoftBevelBorder"));
		panel.add(createPanel(new LineBorder(Color.ORANGE, 4), "LineBorder"));
		panel.add(createPanel(new MatteBorder(new ImageIcon("1.gif")), "MatteBorder")); 
		setContentPane(panel);
		pack();
	}
	
	private JPanel createPanel(Border border, String text) {
		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());
		panel.add(new JButton(text));
		panel.setBorder(new CompoundBorder(new EmptyBorder(12,12,12,12), border));
		return panel;
	}	
}

public class testBorder {
	public static void main (String [] args) {
		JFrame myWindow = new SimpleWindowPanelBorder();
		myWindow.setVisible(true);
	}
}

6. Компоненты

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.*;
import javax.swing.border.TitledBorder;

class SimpleWindowLabel extends JFrame {
	SimpleWindowLabel() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JLabel label = new JLabel("<html>Метка со значком и с <font size=+5>большой</font> <i>надписью</i></html>", new ImageIcon("1.gif"), SwingConstants.RIGHT);
		getContentPane().add(label);
		pack();
	}
}

class SimpleWindowButton2 extends JFrame {
	SimpleWindowButton2() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JButton button = new JButton("Кнопка", new ImageIcon("1.gif"));
		button.setMargin(new Insets(0, 10, 20, 30));
		button.setVerticalTextPosition(SwingConstants.TOP);
		button.setHorizontalTextPosition(SwingConstants.LEFT);
		getContentPane().add(button);
		pack();
	}
}

class SimpleWindowToggles extends JFrame {
	SimpleWindowToggles() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ImageIcon icon = new ImageIcon("1.gif");
		// будем использовать один значок на все случаи

		Box mainBox = Box.createVerticalBox();

		Box box1 = Box.createVerticalBox();
		JToggleButton tButton1 = new JToggleButton("Кнопка выбора 1");
		JToggleButton tButton2 = new JToggleButton("Кнопка выбора 2", icon);
		ButtonGroup bg = new ButtonGroup();
		// создаем группу взаимного исключения
		bg.add(tButton1);
		bg.add(tButton2); 
		// сделали кнопки tButton1 и tButton2 взаимоисключающими
		box1.add(tButton1);
		box1.add(tButton2);
		// добавили кнопки tButton1 и tButton2 на панель box1
		box1.setBorder(new TitledBorder("Кнопки выбора"));
		Box box2 = Box.createVerticalBox();
		JCheckBox check1 = new JCheckBox("Флажок 1");
		JCheckBox check2 = new JCheckBox("Флажок 2", icon);
		box2.add(check1);
		box2.add(check2);
		// добавили флажки на панель box2
		box2.setBorder(new TitledBorder("Флажки")); 
		Box box3 = Box.createVerticalBox(); 
		JRadioButton rButton1 = new JRadioButton("Переключатель 1");
		JRadioButton rButton2 = new JRadioButton("Переключатель 2", icon);
		rButton2.setSelectedIcon(new ImageIcon("2.gif"));
		bg = new ButtonGroup(); // создаем группу взаимного исключения 
		bg.add(rButton1); 
		bg.add(rButton2); 
		// сделали радиокнопки взаимоисключающими 
		box3.add(rButton1); 
		box3.add(rButton2); 
		// добавили радиокнопки на панель box3 
		box3.setBorder(new TitledBorder("Переключатели"));
		mainBox.add(box1); 
		mainBox.add(box2);
		mainBox.add(box3);
		setContentPane(mainBox);
		pack();
	}
}

class SimpleWindowText extends JFrame {
	SimpleWindowText() {
		super("Пробное окно");
		JTextField textField = new JTextField("Текстовое поле", 20);
		textField.setCaretColor(Color.RED);
		textField.setHorizontalAlignment(JTextField.RIGHT);
		
		JPasswordField passwordField = new JPasswordField(20); 
		passwordField.setEchoChar('$');
		passwordField.setText("пароль");
		
		JTextArea textArea = new JTextArea(5, 20);
		textArea.setLineWrap(true);
		textArea.setWrapStyleWord(true);
		for (int i = 0; i <= 20; i++)
			textArea.append("Область для ввода текстового содержимого ");
		
		getContentPane().add(textField, BorderLayout.NORTH);
//		getContentPane().add(textArea);
		getContentPane().add(new JScrollPane(textArea)); 
		getContentPane().add(passwordField, BorderLayout.SOUTH);
		pack();
	}
}

public class testFrameComponents {
	public static void main (String [] args) {
		JFrame myWindow = new SimpleWindowText();
		myWindow.setVisible(true);
		
		myWindow = new SimpleWindowToggles();
		myWindow.setVisible(true);
	}
}

7. MouseListener

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

class SimpleWindowButtonListener extends JFrame {
	JTextField tField;
	class MouseL implements MouseListener { 
		public void mouseClicked(MouseEvent event) {
			if (tField.getText().equals("Иван"))
				JOptionPane.showMessageDialog(null, "Привет");
			else JOptionPane.showMessageDialog(null, "Пока!");
		}
		public void mouseEntered(MouseEvent event) {}
		public void mouseExited(MouseEvent event) {}  
		public void mousePressed(MouseEvent event) {} 
		public void mouseReleased(MouseEvent event) {} 
	}

	SimpleWindowButtonListener() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 300);
		JButton newButton = new JButton("Жмакни меня");
		newButton.addMouseListener(new MouseL());
		
		newButton.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent event) { 
				if (tField.getText().equals("Иван"))
					JOptionPane.showMessageDialog(null, "Вход выполнен1");
				else JOptionPane.showMessageDialog(null, "Вход НЕ выполнен1");
			}   
		});		
		
		tField = new JTextField("Привет");
		getContentPane().add(tField, BorderLayout.NORTH);
		getContentPane().add(newButton, BorderLayout.SOUTH);
	}
}

public class testMouseListener {
	public static void main (String [] args) {
		JFrame myWindow = new SimpleWindowButtonListener();
		myWindow.setVisible(true);
	}
}

8. ActionListener

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

class SimpleWindowButtonListener2 extends JFrame {
	JTextField tField;
	SimpleWindowButtonListener2() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 300);
		JButton newButton = new JButton("Жмакни меня");

		newButton.addActionListener(new ActionListener() {  
			public void actionPerformed(ActionEvent event) { 
				if (tField.getText().equals("Иван")) 
					JOptionPane.showMessageDialog(null, "Вход выполнен2");
				else JOptionPane.showMessageDialog(null, "Вход НЕ выполнен2");
			}  
		});		
		
		tField = new JTextField("Привет");
		getContentPane().add(tField, BorderLayout.NORTH);
		getContentPane().add(newButton, BorderLayout.SOUTH);
	}
}

public class testActionListener {
	public static void main (String [] args) {
		JFrame myWindow = new SimpleWindowButtonListener2();
		myWindow.setVisible(true);
	}
}

9. Action

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;

import javax.swing.*;

class SimpleWindowAction extends JFrame {  
	private ExitAction exitAction; 
	SimpleWindowAction(){ 
		super("Окно с меню");
		setDefaultCloseOperation(EXIT_ON_CLOSE); 
		exitAction = new ExitAction();
		DeactivateAction deactivateAction = new DeactivateAction(); 
		JMenuBar menuBar = new JMenuBar(); 
		JMenu fileMenu = new JMenu("Файл"); 
		fileMenu.add(new JMenuItem("Новый"));
		fileMenu.addSeparator();
		fileMenu.add(deactivateAction); 
		fileMenu.add(exitAction);
		menuBar.add(fileMenu); 
		setJMenuBar(menuBar);
		JToolBar toolBar = new JToolBar("Панель инструментов"); 
		toolBar.add(exitAction); 
		toolBar.add(deactivateAction); 
		getContentPane().add(toolBar, BorderLayout.NORTH); 
		JPanel panel = new JPanel();
		panel.add(new JButton(exitAction));
		panel.add(new JButton(deactivateAction));
		getContentPane().add(panel); setSize(250,250); 
	} 
	
	class ExitAction extends AbstractAction { 
		ExitAction(){
			putValue(Action.NAME, "Выйти"); 
			putValue(Action.SHORT_DESCRIPTION, "Программа перестанет работать, а окно исчезнет с экрана."); 
			putValue(Action.SMALL_ICON, new ImageIcon("2.gif"));
		} 
		public void actionPerformed(ActionEvent event) { 
			System.exit(0);
		}
	} 
	class DeactivateAction extends AbstractAction { 
		DeactivateAction(){
			putValue(Action.NAME, "Запретить выход");
			putValue(Action.SMALL_ICON, new ImageIcon("1.gif"));
		} 
		public void actionPerformed(ActionEvent event) { 
			if (exitAction.isEnabled()) {
				exitAction.setEnabled(false);
				putValue(Action.NAME, "Разрешить выход"); 
			} else { 
				exitAction.setEnabled(true);
				putValue(Action.NAME, "Запретить выход"); 
			} 
		}
	}  
}

public class testAction {
	public static void main (String [] args) {
		JFrame myWindow = new SimpleWindowAction();
		myWindow.setVisible(true);
	}
}

10. Swing and Threads

import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

class SimpleWindowProgress extends JFrame {
	JTextField tField;
	static JProgressBar pBar;

	SimpleWindowProgress() {
		super("Пробное окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400, 300);
		JButton newButton = new JButton("Жмакни меня");
		
		newButton.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent event) { 
				if (tField.getText().equals("Иван"))
					JOptionPane.showMessageDialog(null, "Вход выполнен");
				else JOptionPane.showMessageDialog(null, "Вход НЕ выполнен");
			}   
		});		
		
		tField = new JTextField("Привет");
		pBar = new JProgressBar();
		getContentPane().add(tField, BorderLayout.NORTH);
		getContentPane().add(newButton, BorderLayout.SOUTH);
		getContentPane().add(pBar);
	}
}

class Task extends Thread {
	public void run() {
		for (int i = 0; i <= 100; i++) {
			final int percent = i;
			try {
				SwingUtilities.invokeLater(new Runnable() {
					public void run() {		
						SimpleWindowProgress.pBar.setValue(percent);
					}
				});

//                              НЕ ДЕЛАЙТЕ ТАК!!!
//				SimpleWindowProgress.pBar.setValue(percent);

				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public class testThreads {
	public static void main (String [] args) {
		JFrame myWindow = new SimpleWindowProgress();
		myWindow.setVisible(true);
		Thread t = new Task();
		t.start();
	}
}