You are on page 1of 18

JAVA SWING

Javax.Swing paketi Java Foundation Classes (JFC) kütüphanesi içindedir. 134 sınıfı olan, 25 arayüz kılgılayan büyük bir pakettir. Java.AWT (Java Abstract Window Toolkit) paketinin üzerine kuruludur ve uygulamalarda onun işlevini üstlenmiştir. Java ile Grafiksel Arayüzler (GUI) hazırlamak için gerekli bütün araçlara sahiptir. Son zamanlarda, programcıların büyük oranda tercih ettikleri bir pakettir. Bir görsel arayüz hazırlarken, en alta bir çerçeve (JFrame) konulur. Bu çerçeve içine genellikle bir panel konulur. Panel üzerine düğme, text alanı, liste, menü gibi görsel araçlar yerleştirilir.

JComponent’in alt sınıfları

Frame:
Boyutları değişebilen, hareket edebilen, üzerinde bir ad şeridi ve kapatma düğmesi olan swing aracıdır. Window sınıfından türetilmiştir. Genellikle, panelleri içerir. Öntanımlı konuşlanması BorderLayout’dur.

Panel:
Bir çerçeve (Frame) ya da başka bir panel içinde yer alan ve üzerine swing araçları konulan düzlemsel bölge. Görünür sınırı yoktur, ama istenirse zemin rengi ile panel bölgesi belirli kılınabilir. Container sınıfından türetilmiştir. Öntanımlı konuşlanma yöntemi FlowLayout’dur. Frame ile panel arasındaki farklar: 1

add(BorderLayout. frame gibi boş değildir. f. f. Üste konulan panel. java.Swing paketinin yaptığı işleri göstermek amacıyla örnek programlar yazacağız. O kap bir frame ya da başka bir panel olabilir. import java. f. } } Çıktı: 2 . başka bir kap içinde olmak zorundadır.setVisible(true).CENTER. new JTextArea(10. Bu bölümde. 250). Tabii. Duvardaki boş resim çerçevesi gibidir.*.getContentPane(). frame ve panel sınıflarının her ikisininde üst sınıfları Container ve Component olduğu için. JFrame Örnekleri Aşağıdaki program boş bir JFrame yaratır. Panel’in içi. 200). public class JFrameDemo { public static void main(String[] args) { JFrame f = new JFrame("JFrame Çerçevesi").*. Panel ise kendi başına var olamaz. f. Üst katman alttakileri görünmez kılabilir.setLocation(300.setSize(250. kalıtsal benzerlikleri vardır.Frame kendi başına vardır ve daima en altta yer alır. Üst üste konulabilirler.swing. Çerçeve içine yerleştirilen ve üzerine resim konulan karton zeminlere benzetilebilir. alttakileri görünmez kılar.awt. 40)). import javax. Çerçeve içerisine kat kat nesneler konulabilir.

*.EXIT_ON_CLOSE).setLocation(300.*.*.CENTER. public class JFrameDemo { public static void main(String[] args) { SwingUtilities.swing.show(). 40)). } public static void createAndShowFrame() { JFrame jf = new JFrame("Çerçeve").getContentPane(). } } package swing. jf.swing. jf. jf. } }). new JTextArea(10.setDefaultCloseOperation(JFrame. 250). frame.setVisible(true). import javax. import javax. 200). } } 3 . frame.import java.awt.setSize(250.add( BorderLayout.invokeLater(new Runnable() { public void run() { createAndShowFrame(). jf. public class FrameDemo { public static void main(String[] args) { BoçÇerçeve frame = new BoçÇerçeve().

new TextArea(10.windowHeight)/2.getToolkit().windowWidth)/2. myFrame.height.setLocation(upperLeftX. myFrame.getSize(). myFrame. Toolkit kit = myFrame. myFrame. int screenHeight = screenSize.setSize(250. int upperLeftY = (screenHeight . upperLeftY). int upperLeftX = (screenWidth .width.class BoçÇerçeve extends JFrame { public BoçÇerçeve() { setSize(DEFAULT_WIDTH. int screenWidth = screenSize.getScreenSize().add(BorderLayout. int windowHeight = windowSize. 250). public static final int DEFAULT_HEIGHT = 200. } public static final int DEFAULT_WIDTH = 300.awt. Dimension windowSize = myFrame.*.show(). int windowWidth = windowSize. } Çıktı: Frame’i Ekranın Ortasına Konuşlandırma import java. public class CenteredFrameTester { public static void main(String[] args) { Frame myFrame = new Frame("My Frame"). Sonra onun üzerine üç düğme koyuyor. Düğmeler FlowLayout yöneticisi tarafından konuşlandırılıyor. 4 . } } Button Örneği: Aşağıdaki program JFrame üzerine önce bir Container yerleştiriyor. Dimension screenSize = kit. DEFAULT_HEIGHT).width.CENTER.height. 40)).

package frame. } } Çıktı: 5 .*.setSize(400. JFrame f = new JFrame("Deneme"). //f. import java.add(new JButton("Button 3")).setVisible(true). content. f. content. f. Container content = f.add(new JButton("Button 2")). content.getContentPane(). public class JFrameDemo { public static void main(String[] args) { //WindowUtilities.setLayout(new FlowLayout()). 150). content.*. content.swing.blue).awt.setBackground(Color.setNativeLookAndFeel().addWindowListener(new ExitListener()). import javax.add(new JButton("Button 1")).

swing. class FrameDemo extends JFrame { // Constructor: public FrameDemo() { setTitle("İkinci Boş Frame").0 (top left corner) // Window Listeners addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System. * Fram'i tamamen kapatmak için WindowListener çağrılıyor */ // file: FrameDemo2. } } Çıktı: 6 . } //windowClosing }). f.event.awt. Onun yerine setVisible(true) metodu kullanılmalıdır.*.JFrame Örneği Show() metodu deprecate oldu. import javax. /* *Yaratılan Frame sistem kaynaklarını kullanıyorsa * kapat düğmesine basmak yetmeyecektir.*.exit(0).0 setLocation(10. } public static void main(String[] args) { JFrame f = new FrameDemo(). setSize(300. // default is 0. package swing.show().java import java. // default size is 0. 200). 200).

public class JTableTest extends JFrame { String data[][] = {{"Didem". "Berna"}. "Sabri"}. "Fehime". "Ceyda".WindowEvent. {"Merve".event. "İlknur"}.event.}. } FrameDemo() { JLabel jlb1 = new JLabel("JavaLabel Örneği").*. "Kolon2". "Kolon3"}. "Mine"}. // pack().setSize(100.swing. } public JTableTest(String title) { 7 . import javax. this.JLabel.JFrame. "Damla".awt. import java.JFrame: import javax. add(jlb1).swing. import java. 100). {"Volkan". public class FrameDemo extends JFrame { public static void main(String args[]) { new FrameDemo().swing. setVisible(true). {"Neslihan". "Koray".awt.WindowAdapter. public static void main(String[] argv) { JTableTest jtt = new JTableTest("JTable Örneği"). String fields[] = {"Kolon1". } } Çıktı package swing. import javax.

swing. this.setTitle("Merhaba Swing"). this. pack(). System. getContentPane(). JScrollPane pane = new JScrollPane(jt). } } //package gui.swing.swing.JTextField jTextField = null. import javax. fields).JFrame.add(getJButton(). 150).JButton jButton = null. addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { dispose().add(getJLabel().swing.exit(0). } }). } private void init() { JTable jt = new JTable(data. null). setSize(150.getContentPane(). null).super(title). setVisible(true). null).JLabel jLabel = null. init(). this.setSize(300. this. } 8 .setLayout(null). class SwingDemo extends JFrame { private javax. public SwingDemo() { super().add(pane). this. this. private javax. private javax. 200).add(getJTextField().

27).swing.JLabel().awt. jTextField.setText("Adınız:"). public class AL extends Frame implements WindowListener. } private javax. jLabel. 20).swing.JButton().JTextField getJTextField() { if (jTextField == null) { jTextField = new javax. 71. jLabel.JLabel getJLabel() { if (jLabel == null) { jLabel = new javax.private javax.awt.ActionListener { TextField text = new TextField(20). 18).*.setBounds(96. 53. 49.setBounds(34. sd. import java.swing. } return jTextField.swing. } public static void main(String[] args) { SwingDemo sd = new SwingDemo().JTextField(). 49. } return jButton. } return jLabel.*.JButton getJButton() { if (jButton == null) { jButton = new javax.setText("OK").swing.setVisible(true). 160. 110.event. jButton. 9 .setBounds(103. } private javax. Button b. } } Çıktı: import java.swing. jButton. private int numClicks = 0.

text. add(b). b = new Button("Tıkla"). setLayout(new FlowLayout()). myWindow.addActionListener(this). } public AL(String title) { super(title).setText("Düğme " + numClicks + " kez tıklandı"). } public void actionPerformed(ActionEvent e) { numClicks++. b.setSize(350. add(text).setVisible(true).public static void main(String[] args) { AL myWindow = new AL("Window Örneği"). } public public public public public public } void void void void void void windowOpened(WindowEvent e) {} windowActivated(WindowEvent e) {} windowIconified(WindowEvent e) {} windowDeiconified(WindowEvent e) {} windowDeactivated(WindowEvent e) {} windowClosed(WindowEvent e) {} 10 . myWindow. addWindowListener(this).exit(0). System. } public void windowClosing(WindowEvent e) { dispose().100).

// default size is 0.awt. 14).0 (top left corner) // Window Listeners addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System. // default is 0. import java.swing. FontMetrics fm = g. int cy = 100. import javax. g.java /************************************************************* * @file: TextPanel.getFontMetrics(fi).// TextPanel.awt. ".200).java * @source: adapted from Horstmann and Cornell. Spring 2003. Font fi = new Font("SansSerif". g. } //paintComponent //============================================= ///////////// main //////////////////////////// public static void main(String[] args) { JFrame f = new MyFrame("My Hello World Frame").0 setLocation(10. cy).BOLD. //addWindowLister 11 .setFont(fi). setSize(300. Core Java * @history: Visualization Course.*. 14). cx. int cx = 75. cx.paintComponent(g).*. Chee Yap *************************************************************/ import java.show(). Font.drawString("Hello. g. g.*. Font f = new Font("SansSerif".BOLD + Font. FontMetrics fim = g.stringWidth("Hello. } //main } //class TextPanel /************************************************************* MyFrame Class *************************************************************/ class MyFrame extends JFrame { public MyFrame(String s) { // Frame Parameters setTitle(s).200).getFontMetrics(f). f. cy).drawString("World!". /************************************************************* * TextPanel Class (with main method) *************************************************************/ class TextPanel extends JPanel { // override the paintComponent method // THE MAIN DEMO OF THIS EXAMPLE: public void paintComponent(Graphics g) { super. } //windowClosing }).event.exit(0).setFont(f). cx += fm. "). Font.ITALIC.

} //constructor MyFrame 12 .// Add Panels Container contentPane = getContentPane().add(new TextPanel()). contentPane.

private DefaultListModel model. if ( !model.DateFormat. 13 .JButton. if (event. public MyEvent() { setTitle("Event Object").setLayout(null). import java. 35.import java.swing.swing. ok. JPanel panel = new JPanel().event.DefaultListModel. ok.JList. import javax.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { Locale locale = Locale.swing.setBounds(150.Date. panel.Locale.ACTION_PERFORMED) model.clear().ActionListener. import javax. Date date = new Date().util.getID() == ActionEvent. list.event.addElement(" Event Id: ACTION_PERFORMED").Calendar. public class MyEvent extends JFrame { private JList list.text. import java.getDefault().util. 30. JButton ok = new JButton("Ok"). import javax.getTimeInstance(DateFormat.JFrame.format(date). 150). model.swing. import java. import javax. 220. 80.JPanel. import java. list = new JList(model). 25). String s = DateFormat. import javax.SHORT.awt.swing.util.isEmpty() ) model.setBounds(30.addElement(" Time: " + s). import java.ActionEvent.awt. locale). model = new DefaultListModel().

addElement(" Source: " + source). panel. setSize(420. add(panel). if ((mod & ActionEvent.append("Meta "). 250). } public static void main(String[] args) { new MyEvent().append("Ctrl "). int mod = event. model.SHIFT_MASK) > 0) buffer. if ((mod & ActionEvent.String source = event. if ((mod & ActionEvent. panel. setDefaultCloseOperation(EXIT_ON_CLOSE).addElement(buffer).ALT_MASK) > 0) buffer.getModifiers(). model. setLocationRelativeTo(null).META_MASK) > 0) buffer.getClass(). setVisible(true).getSource(). } }).append("Shift "). StringBuffer buffer = new StringBuffer(" Modifiers: ").CTRL_MASK) > 0) buffer.append("Alt "). if ((mod & ActionEvent.add(list).getName(). } } 14 .add(ok).

import javax.import java.awt.getContentPane(). 150). 10. import java. true.setBounds(10. c. 150). public class CommonLayouts extends JFrame { public CommonLayouts() { super("Common Layout Managers").add(new JButton("3")).SOUTH).setBounds(170.add(new JButton("4")).swing. c = fr2.add(fr3.X". desktop.add(new JButton("1")).event.*. BorderLayout. fr3.add(fr2.awt.setLayout(new FlowLayout()). c. c.setBounds(330.add(fr1. 150.*. c. JInternalFrame fr4 = new JInternalFrame("BoxLayout . c.add(new JButton("2"). BorderLayout. 0).NORTH). 150.border. import java.add(new JButton("4")). JInternalFrame fr1 = new JInternalFrame("FlowLayout".*.add(new JButton("2")).event. c. c. BorderLayout. 150.swing.add(desktop). BorderLayout. c.add(new JButton("4"). 15 . true. import javax. fr2. setSize(500.EAST). c.getContentPane(). desktop. JDesktopPane desktop = new JDesktopPane(). import javax.add(new JButton("3").add(new JButton("2")).add(new JButton("1")). 0). Container c = fr1. c = fr3. true).WEST).add(new JButton("1").util. desktop.setLayout(new GridLayout(2.*. true). 10.swing. c. c. JInternalFrame fr2 = new JInternalFrame("GridLayout". c. fr1. 0).*. 380). c. 2)). JInternalFrame fr3 = new JInternalFrame("BorderLayout".*.add(new JButton("3")). 150). true). 10.getContentPane(). c. getContentPane(). true.

c. } catch (java. setVisible(true).getContentPane().Y_AXIS)).add(fr4. BoxLayout. } }.beans.exit(0).setLayout(new BoxLayout(c. c.Y". c.createGlue()). true. c.add(Box.setBounds(330. 0). true).setSelected(true). c = fr4. desktop.X_AXIS)).add(Box. 0).add(new JButton("2")).createHorizontalStrut(12)).createHorizontalGlue()). 250.add(Box. BoxLayout.createVerticalGlue()).add(new JButton("4")). JInternalFrame fr5 = new JInternalFrame("BoxLayout . fr4. c.PropertyVetoException ex) {} WindowListener wndCloser = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.setLayout(new BoxLayout(c.add(new JButton("1")).add(new JButton("4")).setBounds(10. c. addWindowListener(wndCloser).getContentPane(). 170. } public static void main(String argv[]) { new CommonLayouts(). 150. c. c. c.add(Box.add(new JButton("1")).createGlue()). c = fr5.add(new JButton("2")).true.add(new JButton("3")). 180).createVerticalStrut(10)). } } 16 . c. true). fr5.add(Box.add(fr5.add(Box. c. c. 170. c. c. desktop. 120). c. try { fr1.add(new JButton("3")). c.

17 .setBorder(new LineBorder (Color. p = new JPanel(). import javax. JPanel content = (JPanel) getContentPane(). p = new JPanel().LOWERED)). class BorderTest extends JFrame { public BorderTest() { setTitle("Border Test").10)). p.add(p). p.setBorder(new SoftBevelBorder (SoftBevelBorder.*.setBorder(new EtchedBorder (EtchedBorder.*. content. p.awt.add(new JLabel("RAISED SoftBevelBorder")).RAISED)). setSize(450. p.add(new JLabel("LOWERED EtchedBorder")). p.add(new JLabel("Black LineBorder. p = new JPanel().add(p). content.swing. p. p.10.add(p).import java.*. p = new JPanel().add(p).LOWERED)). content.setBorder(new EtchedBorder (EtchedBorder. content.RAISED)).setBorder(new BevelBorder (BevelBorder. content.add(p).add(new JLabel("LOWERED BevelBorder")).black. p.setBorder(new EmptyBorder (10.setBorder(new BevelBorder (BevelBorder. content.2)).add(p). thickness = 5")).add(new JLabel("RAISED BevelBorder")).add(p). p = new JPanel(). JPanel p = new JPanel().border. p.RAISED)). p. p = new JPanel(). p. p. content. 5)). import javax.add(new JLabel("RAISED EtchedBorder")). content.swing.setLayout(new GridLayout(6.10. 450). p = new JPanel(). p. p.add(new JLabel("EmptyBorder with thickness of 10")).

p = new JPanel().setBorder(new TitledBorder ( new MatteBorder (new ImageIcon("spiral.LOWERED)). p. } public static void main(String args[]) { new BorderTest(). content. p. "Title String")). "Title String")). p. content.add(new JLabel("TitledBorder using EmptyBorder")). p. p.add(new JLabel("TitledBorder using LineBorder")).p. } } 18 .setBorder(new TitledBorder ( new LineBorder (Color. "Title String")).10. p. p. p.gif"))).setBorder(new TitledBorder ( new EmptyBorder (10.add(p).black.add(new JLabel("MatteBorder")).setBorder(new MatteBorder (new ImageIcon("spiral. p = new JPanel().setBorder(new SoftBevelBorder (SoftBevelBorder. content. content.add(p). p.add(new JLabel("TitledBorder using MatteBorder")). p = new JPanel().add(p).add(p). 5). setVisible(true).gif")).add(p). content.10.add(new JLabel("LOWERED SoftBevelBorder")). p = new JPanel().10).