2013-11-12 4 views
0

Я знаю, что это глупый вопрос для Java-трещин там. На данный момент я пишу небольшую программу рисования.Изменение масштаба хода во время работы программы

Так что моя проблема в том, что я хочу установить размер штриха в маленьком dropdownmenu.

Код для выпадающего списка здесь:

DefaultComboBoxModel model = new DefaultComboBoxModel(); 
    model.addElement("1"); 
    model.addElement("5"); 
    model.addElement("10"); 
    JComboBox comboBox = new JComboBox(model); 
    panel.add(comboBox); 

И Кодекс размера инсульта здесь:

  public void mouseDragged(MouseEvent e) { 
      currentX = e.getX(); 
      currentY = e.getY(); 

      graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

      Stroke stroke = new BasicStroke(10); 
      graphics2D.setStroke(stroke); 
      graphics2D.drawLine(oldX, oldY, currentX, currentY); 
      repaint(); 

      oldX = currentX; 
      oldY = currentY;    
     } 

10-в BasicStroke лишь некоторые случайное число. Я хотел это осознать, что он читает из раскрывающегося списка (стандарт 1), сохраняет его в переменной и переменная используется в функции BasicStroke.

Вот весь код (проект Netbeans):

package paint; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
public class Paint { 

public static void main(String[] args) { 
    PaintWindow frame = new PaintWindow(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setResizable(false); 
    frame.setVisible(true); 
} 
} 

class PaintWindow extends JFrame { 

public PaintWindow() { 
    setTitle("Paint it"); 
    setSize(700, 600); 

    panel = new JPanel(); 
    panel.setPreferredSize(new Dimension(64, 64)); 
    drawPad = new PadDraw(); 

//Creates a new container 
    Container content = this.getContentPane(); 
    content.setLayout(new BorderLayout()); 

//sets the panel to the left, padDraw in the center 
    content.add(panel, BorderLayout.NORTH); 
    content.add(drawPad, BorderLayout.CENTER); 

//add the color buttons: 
    makeColorButton(Color.BLACK); 
    makeColorButton(Color.BLUE); 
    makeColorButton(Color.MAGENTA); 
    makeColorButton(Color.RED); 
    makeColorButton(Color.ORANGE); 
    makeColorButton(Color.YELLOW); 
    makeColorButton(Color.GREEN); 
    makeColorButton(Color.CYAN); 

    DefaultComboBoxModel model = new DefaultComboBoxModel(); 
    model.addElement("1"); 
    model.addElement("5"); 
    model.addElement("10"); 
    JComboBox comboBox = new JComboBox(model); 
    panel.add(comboBox); 

//creates the clear button 
    JButton clearButton = new JButton("Clear"); 
    clearButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      drawPad.clear(); 
     } 
    }); 
    panel.add(clearButton); 

    panel = new JPanel(); 
    JLabel jlabel = new JLabel("Copyright© by Jan Büttiker"); 
    panel.setPreferredSize(new Dimension(0, 20)); 
    panel.add(jlabel); 
    content.add(panel, BorderLayout.SOUTH); 
} 

/* 
* makes a button that changes the color 
* @param color the color used for the button 
*/ 
public void makeColorButton(final Color color) { 
    JButton tempButton = new JButton(); 
    tempButton.setBackground(color); 
    tempButton.setPreferredSize(new Dimension(56, 56)); 
    panel.add(tempButton); 
    tempButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      drawPad.changeColor(color); 
     } 
    }); 
} 
private JPanel panel; 
private PadDraw drawPad; 
} 

class PadDraw extends JComponent { 
//this is gonna be the image that you draw on 

Image image; 
//this is what we'll be using to draw on 
Graphics2D graphics2D; 
//these are gonna hold the mouse coordinates 
int currentX, currentY, oldX, oldY; 

public PadDraw() { 
    setDoubleBuffered(false); 
    addMouseListener(new MouseAdapter() { 
//if the mouse is pressed it sets the oldX & oldY 
//coordinates as the mouses x & y coordinates 
     public void mousePressed(MouseEvent e) { 
      oldX = e.getX(); 
      oldY = e.getY(); 
     } 
    }); 

    addMouseMotionListener(new MouseMotionAdapter() { 
//while the mouse is dragged it sets currentX & currentY as the mouses x and y 
//then it draws a line at the coordinates 
//it repaints it and sets oldX and oldY as currentX and currentY 
     public void mouseDragged(MouseEvent e) { 
      currentX = e.getX(); 
      currentY = e.getY(); 

      graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,  
      RenderingHints.VALUE_ANTIALIAS_ON); 
      Stroke stroke = new BasicStroke(10); 
      graphics2D.setStroke(stroke); 
      graphics2D.drawLine(oldX, oldY, currentX, currentY); 
      repaint(); 

      oldX = currentX; 
      oldY = currentY;    
     } 
    }); 
} 

//this is the painting bit 
//if it has nothing on it then 
//it creates an image the size of the window 
//sets the value of Graphics as the image 
//sets the rendering 
//runs the clear() method 
//then it draws the image 
public void paintComponent(Graphics g) { 
    if (image == null) { 
     image = createImage(getSize().width, getSize().height); 
     graphics2D = (Graphics2D) image.getGraphics(); 
     graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
     RenderingHints.VALUE_ANTIALIAS_ON); 
     clear(); 
    } 

    g.drawImage(image, 0, 0, null); 
} 

//this is the clear 
//it sets the colors as white 
//then it fills the window with white 
//thin it sets the color back to black 
public void clear() { 
    graphics2D.setPaint(Color.white); 
    graphics2D.fillRect(0, 0, getSize().width, getSize().height); 
    graphics2D.setPaint(Color.black); 
    repaint(); 
} 

public void changeColor(Color theColor) { 
    graphics2D.setPaint(theColor); 
    repaint(); 
} 
} 

Это мой первый пост, поэтому, пожалуйста, будьте добры, я все еще в стадии обучения ^^.

Спасибо за помощь и имеют хороший день

ответ

1

на эти цели, вам нужно использовать ItemListener на вашем JComboBox. Узнайте больше о ComboBox in tutorial.

1) добавить переменную экземпляра public float strokeSize = 10.0f; к вашему PadDraw в качестве значения по умолчанию.

2) использовать Stroke stroke = new BasicStroke(strokeSize); вместо Stroke stroke = new BasicStroke(10);

3) Создать свой ComboBox в следующем пути, это изменит strokeSize значение, если вы измените значение в JComboBox:

DefaultComboBoxModel<Float> model = new DefaultComboBoxModel<Float>(); 
    model.addElement(1f); 
    model.addElement(5f); 
    model.addElement(10f); 
    final JComboBox<Float> comboBox = new JComboBox<Float>(model); 
    comboBox.addItemListener(new ItemListener() { 

     @Override 
     public void itemStateChanged(ItemEvent arg0) { 
      Float selectedItem = (Float) comboBox.getSelectedItem(); 
      if(selectedItem != null){ 
       drawPad.strokeSize = selectedItem; 
      } 

     } 
    }); 
+0

Большое спасибо за быстрый ответ :) Он работает нормально. Хорошего дня ;) – Pulsar

Смежные вопросы