【進階JAVA】第一次作業–小畫家GUI
PainterFrame.java
這是一個繼承JFrame 的 class,實際上執行的main 放在下面的PainterTest檔案裡。
public class PainterFrame extends JFrame{ private final JComboBox這是 main 檔paintingToolsBox; private final String toolsArray[] = {"筆刷","直線","橢圓形","矩形","圓角矩形"}; private final JPanel northPnl; private final JPanel radioButtonPnl; private final JPanel northRightPnl; private final JPanel northLeftPnl; private final JPanel canvasPnl; private final JRadioButton smallRadioButton; private final JRadioButton mediumRadioButton; private final JRadioButton largeRadioButton; private final ButtonGroup radioGroup; private final JLabel label1; private final JLabel label2; private final JLabel label3; private final JLabel statusBarLabel; private final JCheckBox fillCheckBox; private final JButton button1; private final JButton button2; private final JButton button3; public PainterFrame() { super("小畫家"); BorderLayout layOut = new BorderLayout(); setLayout(layOut); //welcome message //JCombobox paintingToolsBox = new JComboBox (toolsArray); paintingToolsBox.addItemListener( new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED) System.out.printf( "選擇 %s\r\n",toolsArray[paintingToolsBox.getSelectedIndex()]); } }); //上面大Panel northPnl = new JPanel(); GridLayout northLayout = new GridLayout(1,2); northPnl.setLayout(northLayout); //右上panel northRightPnl = new JPanel(); GridLayout northRightLayout = new GridLayout(2,3); northRightPnl.setLayout(northRightLayout); //左上panel northLeftPnl = new JPanel(); GridLayout northLeftLayout = new GridLayout(1,3,10,10); northLeftPnl.setLayout(northLeftLayout); //radioButton panel radioButtonPnl = new JPanel(); radioButtonPnl.setLayout(new GridLayout()); //drawing Panwl canvasPnl = new JPanel(); //labels label1 = new JLabel("繪圖工具"); label2 = new JLabel("筆刷大小"); label3 = new JLabel("填滿"); //radioButtons smallRadioButton = new JRadioButton("小",false); mediumRadioButton = new JRadioButton("中",false); largeRadioButton = new JRadioButton("大",false); radioButtonPnl.add(smallRadioButton); radioButtonPnl.add(mediumRadioButton); radioButtonPnl.add(largeRadioButton); smallRadioButton.addItemListener( new RadioButtonHandler(smallRadioButton.getText())); mediumRadioButton.addItemListener( new RadioButtonHandler(mediumRadioButton.getText())); largeRadioButton.addItemListener( new RadioButtonHandler(largeRadioButton.getText())); //checkBox fillCheckBox = new JCheckBox(); CheckBoxHandler checkBoxHandler= new CheckBoxHandler(); fillCheckBox.addItemListener(checkBoxHandler); //buttons button1 = new JButton("前景色"); button2 = new JButton("背景色"); button3 = new JButton("清除畫面"); button1.addActionListener(new ButtonHandler(button1.getText())); button2.addActionListener(new ButtonHandler(button2.getText())); button3.addActionListener(new ButtonHandler(button3.getText())); //create logical relationship between JRadioButtons radioGroup = new ButtonGroup(); radioGroup.add(smallRadioButton); radioGroup.add(mediumRadioButton); radioGroup.add(largeRadioButton); //status bar,mouse handler statusBarLabel = new JLabel(); MouseHandler mouseHandler = new MouseHandler(); canvasPnl.addMouseMotionListener(mouseHandler); northRightPnl.add(label1);//1 northRightPnl.add(label2);//2 northRightPnl.add(label3);//3 northRightPnl.add(paintingToolsBox);//4 northRightPnl.add(radioButtonPnl);//5 northRightPnl.add(fillCheckBox);//6 northLeftPnl.add(button1); northLeftPnl.add(button2); northLeftPnl.add(button3); northPnl.add(northRightPnl); northPnl.add(northLeftPnl); add(northPnl,layOut.NORTH); add(canvasPnl,BorderLayout.CENTER); add(statusBarLabel,BorderLayout.SOUTH); }//end constructor private class RadioButtonHandler implements ItemListener { public String size; public RadioButtonHandler(String size) { this.size = size; }//end constructor @Override public void itemStateChanged(ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED) System.out.printf("選擇 %s 筆刷\r\n", size); }//end itemStatechanged }//end radioButtonHandler private class CheckBoxHandler implements ItemListener{ @Override public void itemStateChanged(ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED) System.out.println("選擇填滿"); else System.out.println("取消填滿"); }//end itemStateChanged }//end CheckBoxHandler private class ButtonHandler implements ActionListener{ public String text; public ButtonHandler(String text) { this.text = text; }//end constructor @Override public void actionPerformed(ActionEvent e) { System.out.printf("點選 %s\r\n",text); } }//end ButtonHandler private class MouseHandler extends MouseAdapter{ @Override public void mouseMoved(MouseEvent e) { statusBarLabel.setText((String.format("游標位置 [%d,%d]", e.getX(),e.getY()))); }//end mouseMoved }//end mouseHandler }//end class
import javax.swing.JFrame; import javax.swing.JOptionPane; public class PainterTest { public static void main(String[]args) { PainterFrame painterFrame = new PainterFrame(); painterFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); painterFrame.setSize(1000, 500); painterFrame.setVisible(true); JOptionPane.showMessageDialog(painterFrame, "wellcome", "訊息", JOptionPane.PLAIN_MESSAGE); }//end main }//end class
留言
張貼留言