2016-12-18 4 views
-1

** Когда я пытаюсь изменить местоположение любого компонента, такого как ButtonLabelTextField некоторая часть моих фигур становится невидимой. Когда я удалю код, в котором я установил местоположение для компонента (в этом случае это TextField) формы становятся нормальными. **формы становятся невидимыми после изменения местоположения компонентов

public class Line { 


    public static void main(String[] args) { 
     JFrame frame = new JFrame("JFrame Example"); 
     frame.setSize(1366, 768); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(null); 

     frame.setVisible(true); 
     JButton button=new JButton("Show lines"); 
     frame.add(button); 
     button.setBounds(60, 400, 220, 30); 
     button.setVisible(true); 
     JTextField txtf=new JTextField(); 
     frame.add(txtf); 
     txtf.setVisible(true); 
     txtf.setSize(50, 100); 

     button.addMouseListener(new MouseListener() { 
      @Override 
      public void mouseClicked(MouseEvent me) { 
       button.setVisible(false); 
       Graphics2D grf= (Graphics2D) frame.getGraphics(); 

     txtf.setVisible(false); 
     txtf.setText("APPLE"); 
     txtf.setLocation(600, 600); 
     txtf.setVisible(true); 
     grf.fillOval(600, 600, 10, 10); 

     grf.fillOval(190, 600, 10, 10); 
     grf.fillOval(900, 650, 10, 10); 
     grf.fillOval(750, 160, 10, 10); 
     grf.fillOval(600, 400, 10, 10); 
     grf.fillOval(1139, 266, 10, 10); 
     grf.drawLine(1144, 271, 605, 405); 
     grf.drawLine(195, 605, 605, 405); 
     grf.drawLine(755, 165, 605, 405); 
     grf.drawLine(755, 165, 1144, 271); 
     grf.drawLine(905, 655, 1144, 271); 
     grf.drawLine(905, 655, 605, 405); 
     grf.drawLine(205, 205, 605, 405); 
     grf.drawLine(205, 205, 755, 165); 


} 

      @Override 
      public void mousePressed(MouseEvent me) { 
      } 

      @Override 
      public void mouseReleased(MouseEvent me) { 
      } 

      @Override 
      public void mouseEntered(MouseEvent me) { 
      } 

      @Override 
      public void mouseExited(MouseEvent me) { 
      } 
     }); 

     button.setVisible(true); 

    } 

} 
+1

1) Java GUI должны работать с различными ОС, размером экрана, разрешением экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). 2) Пожалуйста, используйте форматирование кода для фрагментов кода и кода, структурированных документов, таких как HTML/XML или ввода/вывода. Для этого выберите текст и нажмите кнопку '{}' в верхней части формы публикации/редактирования сообщения. –

+2

3) Чтобы лучше помочь, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –

ответ

1

Когда я пытаюсь изменить местоположение любого compoenet, таких как Button Label TextFielt некоторая часть моих форм становится invisiable

Вы на заказ картина все неправильно. Вы не должны использовать метод getGraphics() для кадра, чтобы получить объект Graphics. Любая картина, использующая этот подход, будет потеряна, как только Swing определит, что компонент необходимо перекрасить.

Всякий раз, когда вы изменяете свойство компонента Swing, компонент перекрашивается. Поэтому вы теряете любую картину, связанную с вышеуказанным объектом Graphics.

Вместо этого вы должны переопределить paintComponent(...) JPanel и добавить к этому методу свою логику рисования. Затем вы добавляете JPanel в рамку.

Для получения дополнительной информации и рабочих примеров ознакомьтесь с разделом из руководства Swing по телефону Custom Painting. Загрузите примеры и настройте их для вашего фактического требования.

+0

Apoligaise для распространения. Но я использую netbeans.and по этой причине мой кадр отоматически расширяет JFrame. Но для использования paintComponent класс должен расширять JPanel.I пытаюсь создать JPanel в другом классе, а затем вызвать его. Но формы dosn t становятся видимыми. Можете ли вы отправить какой-то код, чтобы помочь мне? Но учтите, что мой кадр расширяет JFrame. – Silver

+0

@ Сильвер, я отправил ваш код. В учебнике есть код. Вы также можете искать форум для всех видов примеров, реализующих метод paintComponent(). 'Но я использую netbeans.' - тогда не используйте Netbeans для создания графического интерфейса. Вы можете использовать IDE для написания кода и отладки, но не создавать форму с помощью среды IDE. Вместо этого тратите время на изучение Java, а не на IDE. Я никогда не использовал IDE для создания формы, поэтому у меня нет идей, как вы это сделаете. – camickr

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